我似乎无法理解如何将变量从 python 传递到 mySQL 数据库。 例如,我有这段代码:
cursor.execute("UPDATE table SET %s = %s + 1 WHERE name = %s", (variable1,variable2,judge))
我试图增加数据库中的某个值,并且我得到了 以及 mySQL 语法错误。 但不知何故,在我的代码的另一部分,我基本上做了同样的事情并且它有效,例如,这工作得很好:
cursor.execute("SELECT row FROM Table WHERE name IN (%s)", (name))
不知何故,我觉得我应该将参数传递给 mySQL 代码段的方式有些不一致。
对于在这种情况下以及一般情况下我应该做什么有什么建议吗?
最佳答案
传递给 cursor.execute
的第二个参数的值必须是字段值。不能是字段或表本身的名称。
cursor.execute("UPDATE table SET %s = %s + 1 WHERE name = %s", (variable1,variable2,judge))
失败,因为variable1
(可能还有variable2
)是字段(列)名称。
cursor.execute("SELECT row FROM Table WHERE name IN (%s)", (name,))
成功,因为name
是一个值。
请注意,我在 name
之后添加了一个逗号,因为第二个参数必须是序列。
字段和表名称必须是 SQL 字符串的一部分 本身。因此,要修复第一条语句,请使用字符串格式 插入字段名称:
cursor.execute("UPDATE table SET {} = {} + 1 WHERE name = %s".format(variable1, variable2), (judge,))
请注意,使用字符串格式可能会使代码容易受到 SQL 的攻击
如果 variable1
或 variable2
是用户提供的,则注入(inject)。在这种情况下,您需要提供有效字段名称的白名单,并且只允许用户从该列表中选择值。
关于python - 将变量从 python 传递到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32286065/