0

我正在尝试使用此处找到的提示从 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 回答