0

hereにあるヒントを使用して、python dict から MySQL 挿入を作成しようとしています。構文が正しくないため、MySQL エラーが発生します。私のクエリでは、フィールド名が一重引用符で囲まれているという問題を追跡しました。私のコードは次のとおりです。

d=dict(a='pepe',b=4,c='potamo')
qmark = ", ".join(['%s'] * len(d))
sql = "INSERT INTO db.table ({}) VALUES ({})".format(qmark,qmark)
c.execute(sql,(d.keys() + d.values())

mysql ログを見ると、次のようになります。

INSERT INTO db.table ('a', 'b', 'c') VALUES ('pepe', 4, 'potamo')

これにより、mysql 例外 (構文エラー) が発生します。MySQLコマンドラインで文を使用すると、同じエラーが発生し、フィールドから一重引用符を手動で削除すると修正されます。

INSERT INTO db.table (a,b,c) VALUES ('pepe',4,'potamo')

したがって、これらの一重引用符を削除する最善の方法は何か、またはcursor.execute()(Mysqldb の一部で) 修正する方法があるかどうか疑問に思っています。これまでのところ、次のようなことしか考えられません。

str(d.keys()).replace("'","") + str(d.values()) 

次に、結果の str を分割してリストに戻し、 にフィードしcursor.execute()ます。または作成する

l=d.keys()

'次に、リストの各要素から の前に を削除します。

execute(sql,(l + d.values()) 

すべてが醜く見えます。

4

1 に答える 1

0

次のようなことを試してください:

d=dict(a='pepe',b=4,c='potamo')
sql = "INSERT INTO db.table (a, b, c) VALUES (%(a)s,%(b)s,%(c)s)"
c.execute(sql, d)
于 2012-09-21T17:45:31.457 に答える