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

标签 python mysql sql mysql-python

我正在使用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/

相关文章:

mysql解释慢在左侧连接表的位置

sql - 如何将存储过程编写到文件中?

python - 无法将 mdm 负载和命令发送到设备

python - 执行三向连接

c++ - 此代码是否易受 SQL 注入(inject)攻击?我怎样才能让它安全?

mysql - 当我必须连接一个表两次时,如何在 SQL 中正确使用内连接?

python - 如何在不阻塞系统的情况下提供延迟的 AMP 回复?

python - 使用 python 属性并且仍然能够显式设置值

php - 基本 SQL 语法、MAMP、PHP 和 MySQL

java - 如果少于 3 个条目,则用零填充列表