You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过变量更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:10