【问题标题】:Python - MySQLdb parametrized queryPython - MySQLdb 参数化查询
【发布时间】:2018-01-02 00:57:20
【问题描述】:

我正在尝试创建一个简单的脚本来更改一些 mysql 数据,但我对参数化查询有点困惑。代码如下所示:

reader_id = sys.argv[1]
cmd_id = sys.argv[2]

conn = mysql.connect(user='...', passwd='...', host='...', db='...')
curs = conn.cursor()

mysql_data = {
    "reader_id": int(reader_id),
    "cmd_id": int(cmd_id)
}

curs.execute("UPDATE `reader_config_hw` SET `changed_` = '1' "
             "WHERE `object_id` = %(reader_id)d AND `id` = %(cmd_id)d;", mysql_data)

curs.execute("UPDATE `reader` SET `check_for_command` = '1' WHERE `id` = %(reader_id)d", mysql_data)

错误结果是

Traceback (most recent call last):
  File "./main.py", line 25, in <module>
    "WHERE `object_id` = %(reader_id)d AND `id` = %(cmd_id)d;", mysql_data)
  File "/usr/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 210, in execute
    query = query % args
TypeError: %d format: a number is required, not str

上面说数字是必需的,但我已经把变量的类型改成了int(reader_id),对吗?

【问题讨论】:

    标签: python mysql-python sql-parametrized-query


    【解决方案1】:

    尝试改变 "WHERE 'object_id' = %(reader_id)d AND 'id' = %(cmd_id)d;"

    "WHERE 'object_id' = %(reader_id)s AND 'id' = %(cmd_id)s;"

    我认为变量调用后的“d”表示“数字”,而您需要使用字符串。

    编辑:澄清一下,在 MySQL 查询中可以使用字符串代替整数

    【讨论】:

    • 那行得通,我已经尝试过这个解决方案。问题是当使用%(variable)s 时,我正在使用的IDE (pyChram) 在解析SQL 查询时会报错。另外我想解释一下为什么会这样。
    • 啊,明白了。不幸的是,我不熟悉 pyCharm。希望您尽快得到解决方案!对不起,我无法提供更多帮助:(
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2010-12-03
    • 2012-10-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多