我的代码尝试遍历dictionary“dbMap”,并根据dbMap的键和值执行MySQL INSERT INTO语句:
for key in dbMap:
try:
cursor.execute("INSERT INTO '%s' (id, additional_details) VALUES (123, '%s')", (key, dbMap[key]))
except UnicodeEncodeError:
pass
运行上述代码时,出现以下错误:
_mysql_异常。编程错误:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获取正确的语法,以使用靠近'''random\'u key'(id,附加的\'u details')值(123,'random_value'在第1行)”
我看不出我违反了什么MySQL语法,我按照以下资源寻求帮助:
http://www.mikusa.com/python-mysql-docs/query.html
http://www.w3schools.com/sql/sql_insert.asp
在更新:当我试试这个:
^{pr2}$我得到了另一个错误:
_mysql_异常操作错误:(1054,“字段列表”中的“id”列未知)
更新2:
for key in dbMap:
try:
query = "INSERT INTO `%s` (id, additional_details) VALUES(123, %%s)" % key
cursor.execute(query, dbMap[key])
except UnicodeEncodeError:
pass
有一个新错误:TypeError:在字符串格式化过程中,不是所有参数都被转换
如果你能帮我找出问题所在,我将不胜感激
mysqldb库只允许您替换值,而不允许使用表:
Python and MySQLdb: substitution of table resulting in syntax error
在使用Python的MySQL库时,我认为您不希望在变量周围使用
'
。我相信它们使%s
被逐字解释,而不是被替换。不过,自从我使用这种方法以来,已经有一段时间了,所以我可以离开基地。试试这个:Python将代替您。在
同时考虑使用SQL来防止注入。查看-this post-最常浏览的SO之一。在
另外,由于我仔细观察了Python代码行和实际错误,我认为您的代码行并没有实现您认为的那样。在
^{pr2}$for key in dbMap
将生成dbMap
的值,而不是键值-因此,当您调用dbMap[key]
时,由于key
不是索引,它会得到一个错误。这也可能意味着您无法使用INSERT INTO key
获得所需的表。值得深思。尝试:这将允许您访问键索引(
idx
)和mapDB
值。在我刚刚加入了一个解释器来处理这个问题,看起来你不能在MySQLdb API中替换一个表名,因为它会把你的替换用引号括起来(表名可以反勾号,但不能加引号),所以你必须分两步来完成。冰山也是正确的,你不提供自己的报价。在
我的样品:
试试看
^{pr2}$相关问题 更多 >
编程相关推荐