【发布时间】:2016-11-02 16:17:59
【问题描述】:
我在 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")
这不起作用,我最终回滚并显示错误消息not all arguments converted during string formatting。如果我硬编码字典值,那么插入工作正常。您能指出使用变量代替硬编码值的正确方法吗?
【问题讨论】:
-
提示:使用
"""..."""三重引号,您就不必使用所有这些反斜杠了.. -
全部回滚肯定有异常?
-
@MartijnPieters 是的,它的“并非所有参数都在字符串格式化期间转换”
-
对,那正好符合我的回答;您正在尝试分别以
('n', 'a', 'm', 'e', '1')和('s', 't', 'a', 't', 'u', 's', '1')作为参数运行stmtSQL,并且由于stmt中没有位置绑定参数,因此没有使用这些参数值。
标签: python mysql sql mysql-python