如何通过变量更新MySQL数据?Python连接MySQL更新操作失败如何解决
问题修复方案
核心错误原因
- SQL语句无法识别Python变量:你编写的UPDATE语句直接把Python变量
last_traded_price写入了SQL字符串,MySQL会将其识别为数据库自身的字段名,无法读取你爬虫抓取到的变量值 - 未提交数据库事务:执行UPDATE这类数据修改操作后,必须调用数据库连接对象的
commit()方法,修改才会实际生效,否则操作会在事务回滚后失效 - 冗余代码:
fetchone()返回的是单条查询结果的元组,不需要循环遍历取值
修复方案
使用参数化查询传递Python变量到SQL语句,执行UPDATE后主动提交事务,修正后的代码如下:
last_traded_price = live_data['JUBLFOOD']['ltp'] # 读取历史价格 mycursor.execute("SELECT price FROM stockprice WHERE ID = 'JUBLFOOD'") myresult = mycursor.fetchone() # 直接取值无需循环 previous_price = myresult[0] change = last_traded_price - previous_price roundup_change = round(change, 2) print(roundup_change) difference = roundup_change / 100 percent = 0.2 if difference >= percent: print('GREAT!!') # 使用参数化查询传递变量,%s为占位符 sql = "UPDATE stockprice SET price = %s where name = 'JUBLFOOD'" # 执行SQL时传入变量组成的元组 mycursor.execute(sql, (last_traded_price,)) # 提交事务,此处的db是你初始化的MySQL连接对象,替换为你自己的连接变量名即可 db.commit() time.sleep(5) conditions() time.sleep(5)
注意事项
- 不要使用字符串拼接的方式把变量拼入SQL语句,会存在SQL注入风险,统一使用参数化占位符传递参数
- 如果更新操作还是不生效,检查WHERE条件的字段是否匹配:你SELECT语句用的WHERE条件是
ID = 'JUBLFOOD',UPDATE语句用的是name = 'JUBLFOOD',确认表中对应字段的取值是否正确
内容的提问来源于stack exchange,提问作者Hatim Neral
相关产品推荐
相关产品推荐

