将变量从python传递到mySQL db

时间:2015-08-29 12:31:13

标签: python mysql

我似乎在理解如何将变量从python传递到mySQL db时遇到了问题。 例如,我有这段代码:

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代码片段的方式有些不一致。

关于在这种情况下我应该做些什么的一般建议?

1 个答案:

答案 0 :(得分:0)

在第二个参数中传递给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的攻击 如果variable1variable2是用户提供的,则进行注入。在这种情况下,您需要提供有效字段名称的白名单,并且只允许用户从该列表中选择值。