Python MySQLdb“INSERT INTO”问题

2024-05-19 02:50:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码尝试遍历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:在字符串格式化过程中,不是所有参数都被转换

如果你能帮我找出问题所在,我将不胜感激


Tags: key代码inidfor错误mysql语法
3条回答

mysqldb库只允许您替换值,而不允许使用表:

Python and MySQLdb: substitution of table resulting in syntax error

在使用Python的MySQL库时,我认为您不希望在变量周围使用'。我相信它们使%s被逐字解释,而不是被替换。不过,自从我使用这种方法以来,已经有一段时间了,所以我可以离开基地。试试这个:

try:
    cursor.execute("INSERT INTO %s (id, additional_details) VALUES (123, %s)", (key, dbMap[key]))

Python将代替您。在

同时考虑使用SQL来防止注入。查看-this post-最常浏览的SO之一。在

另外,由于我仔细观察了Python代码行和实际错误,我认为您的代码行并没有实现您认为的那样。在

for key in dbMap将生成dbMap的值,而不是键值-因此,当您调用dbMap[key]时,由于key不是索引,它会得到一个错误。这也可能意味着您无法使用INSERT INTO key获得所需的表。值得深思。尝试:

^{pr2}$

这将允许您访问键索引(idx)和mapDB值。在

我刚刚加入了一个解释器来处理这个问题,看起来你不能在MySQLdb API中替换一个表名,因为它会把你的替换用引号括起来(表名可以反勾号,但不能加引号),所以你必须分两步来完成。冰山也是正确的,你不提供自己的报价。在

我的样品:

>>> query = "INSERT INTO %s (id, login) VALUES (1972, %%s)" % 'users'
>>> cursor.execute(query, ('TEST-LOGIN123',))
>>> 1L

试试看

^{pr2}$

相关问题 更多 >

    热门问题