すべての値をsqliteデータベースに追加する辞書があります。ディクショナリ内のすべてのキーはデータベースに存在し、すべてのキーはstring型です。しかし、データベースに値を渡すことに問題があります。次のコードは、それは「その中で文字列に出くわすたび、醜い安全でない、とのエラーですが、それは一種の作品。python dictをSQLite DBに挿入
Query="INSERT INTO packages VALUES("
for tag in Tags:
Query=Query + '"' + Package[tag] + '", '
Query=Query[:-2]+")"
cursor.execute(Query)
それが安全であるとして入力を受け付けるようにどのように私はエレガントにこの問題を解決することができ"文字列で?私はいくつかの方法を見つけました。たとえば、
fields = Package.keys()
values = Package.values()
query = "INSERT INTO packages (%s) VALUES (%%s);" % (",".join(fields))
cursor.execute(query, values)
ですが、タイプエラーが発生します。
TypeError: function takes at most 2 arguments (38 given)
最もエレガントな解決策は、私が遭遇してきたこれまでの
sql_insert = ('INSERT INTO packages (%s) VALUES (%s)' %
(','.join('%s' % name for name in Package),
','.join('%%(%s)s' % name for name in Package)))
cursor.execute(sql_insert, Package)
ように見えますが、それはもう一度、私の質問はどのようにすることができますです
sqlite3.OperationalError: near "%": syntax error
を言って、操作エラーがスローされます私はエレガントに安全に値を辞書からデータベースに追加しますか?
P.S.私はPython 2.5.1を使用していることに注意する価値があります。
作品を作成しました魔法のように。ありがとうございました! – Trcx
'タグ 'がOPが使用している辞書である場合を除いて、'タグ 'はキー名を渡すだけで、それらは任意の順序になります。 –
残念ながら、データ値としてフィールド名を持つDBエントリが作成されたため、これは実際には機能しませんでした。このスクリプトはエラーを投げずに実行していたので、今朝はデータベースを見たときに(一晩実行する)、適切な値を持たなかったのです。 – Trcx