gpt4 book ai didi

Python MySQLdb "INSERT INTO"问题

转载 作者:行者123 更新时间:2023-11-29 22:18:49 25 4
gpt4 key购买 nike

我的代码尝试迭代字典“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_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在 '''random_key'' (id, extra_details) VALUES 附近使用的正确语法( 123,第 1 行的“random_value””)

我没有看到我违反了什么 MySQL 语法,我正在按照以下资源寻求帮助:

http://www.mikusa.com/python-mysql-docs/query.html

http://www.w3schools.com/sql/sql_insert.asp

更新:当我尝试这个时:

for key in dbMap:
try:
cursor.execute("INSERT INTO {} (id, additional_details) VALUES (123, '{}')".format(key, dbMap[key]))
except UnicodeEncodeError:
pass

我收到一个不同的错误:

_mysql_exceptions.OperationalError:(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:字符串格式化期间未转换所有参数

非常感谢任何帮助我找出问题所在的帮助

最佳答案

当使用Python的MySQL库时,我认为你不想在变量周围使用'。我相信他们使 %s 按字面意思解释,而不是让它们被替换。不过,自从我使用这种方法以来已经有一段时间了,所以我可能会大错特错。试试这个:

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

Python 将为您进行替换。

此外,考虑使用抽象来防止 SQL 注入(inject)。查看 - this post - SO 最常查看的内容之一。

另外,由于我正在仔细查看您的 Python 行以及您的实际错误,因此我认为您的行并没有按照您的想法进行操作。

for key in dbMap 将生成 dbMap 的值,而不是键值 - 所以当您调用 dbMap[key] 时,因为key 不是索引,它出现错误。这也可能意味着您没有通过 INSERT INTO key 找到所需的正确表格。值得深思。尝试:

for idx, value in enumerate(dbMap):
cursor.execute("INSERT INTO %s (id, additional_details) VALUES (123, %s)", (idx, dbMap[idx]))

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

关于Python MySQLdb "INSERT INTO"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com