首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python参数化查询

Python参数化查询
EN

Stack Overflow用户
提问于 2017-07-26 15:30:35
回答 1查看 130关注 0票数 0

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

代码语言:javascript
复制
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)

错误结果是

代码语言:javascript
复制
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)改变了变量的类型,对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-26 16:02:45

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45331418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档