gpt4 book ai didi

python - 在Python中使用execute()/executemany()执行SQL语句

转载 作者:行者123 更新时间:2023-11-29 20:50:10 33 4
gpt4 key购买 nike

我正在使用Python中的MySQLdb模块来编写SQL语句。我很难以我想要的方式使用变量。这是我的工作:

stmt = '''
INSERT INTO Table1
(name, status)
SELECT (:name1, :status1)
FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM Table1
WHERE name =(:name1))
'''
dic = {"name1":"Bob", "status1":"Active"}

dbcursor.executemany(stmt, dic)
dbconnection.commit()
print("Insertion to Table1 committed\n\n")

这不起作用,我最终回滚并显示错误消息在字符串格式化期间未转换所有参数。如果我对字典值进行硬编码,那么插入就可以正常工作。您能否指出使用变量代替硬编码值的正确方法?

最佳答案

executemany() 接受参数对象(字典)的序列,但您仅传入一个。使用dbcursor.execute(),或者传入一系列字典。由于您只有一本字典,因此只需使用dbcursor.execute():

dbcursor.execute(stmt, dic)

因为 executemany() 将第二个参数视为一系列参数,每个参数都在单独的 execute() 调用中使用,因此您实际上是在尝试运行以字典的作为参数的语句。实际上,传入您的 dic 作为参数会产生:

for key in dic:
dbcursor.execute(stmt, key)

其中键也是可迭代的,生成单独的字符作为使用的参数。您正在尝试使用 ('n', 'a', 'm', 'e', '1')('s', 't', ' 运行该语句a'、't'、'u'、's'、'1')。这对你的陈述不起作用。

关于python - 在Python中使用execute()/executemany()执行SQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38125308/

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