为了账号安全,请及时绑定邮箱和手机立即绑定

使用来自 python 的 ON DUPLICATE KEY UPDATE

使用来自 python 的 ON DUPLICATE KEY UPDATE

慕慕森 2022-04-27 13:41:21
我正在尝试使用此代码更新 mySQL 上的表,但更新部分出现错误table_name = 'my_table'sql_select_Query = """ INSERT {0}  (age, city, gender,UniqueId)VALUES ({1},{2},{3},{4})ON DUPLICATE KEY UPDATE   age=VALUES(age,city=VALUES(city),gender=VALUES(gender),height=VALUES(height)""".format(table_name,  '877','2','1','2898989')    cursor = mySQLconnection .cursor()    cursor.execute(sql_select_Query)    mySQLconnection.commit()例如,要更新我得到的城市:Unknow columns '877'因此,它似乎将该值作为列名并在 my_table 中搜索 then。
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

在 Python 中使用参数的正确方法是在execute()调用中传递值,而不是将值插入到 SQL 查询中。


除了您的情况下的表名等标识符。


sql_select_Query = """

INSERT `{0}`  (age, city, gender, UniqueId)

VALUES (%s, %s, %s, %s)

ON DUPLICATE KEY UPDATE

  age=VALUES(age), city=VALUES(city), gender=VALUES(gender)

""".format(table_name)


cursor.execute(sql_select_Query, ('877', '2', '1', '2898989'))

另请参阅MySQL 参数化查询


你忘了)后面VALUES(age。也许这只是您将问题转录到 Stack Overflow 中的一个错字。我已经在上面的示例中修复了它。


您的 INSERT 语句设置height列,但它不是您插入的元组的一部分。我在上面的示例中删除了它。如果要height在 UPDATE 子句中,则需要将其包含在元组中并在参数中传递一个值。


此外,我在表名周围加上反引号,以防表名是保留关键字或包含空格或其他内容。


查看完整回答
反对 回复 2022-04-27
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信