python - 将变量从 python 传递到 mySQL 数据库

标签 python mysql

我似乎无法理解如何将变量从 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 的攻击 如果 variable1variable2 是用户提供的,则注入(inject)。在这种情况下,您需要提供有效字段名称的白名单,并且只允许用户从该列表中选择值。

关于python - 将变量从 python 传递到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32286065/

相关文章:

php - 确定 SQL UPDATE 是否更改了列的值

mysql - 如何使用 petapoco MVC4 创建联接

python - 使用 mysqldb 模块创建表时出错

python - 列表值的字典理解

php - 无法让 PHP 接受漂亮的 Python 汤脚本中的 POUND 符号

python - 如何使用循环检查字符串中的所有字符是否大写

python - 根据不同列中的值是否属于列表,有选择地填充 Pandas 列

mysql - 在现有数据库中将 latin1 数据转换为 utf8

python - 我正在尝试使用按钮删除窗口。

mysql - 优化MySQL中的where子句查询