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

MySQL查询每次返回相同结果,高频更新的stock字段值无法实时获取

问题根源

你遇到的是MySQL事务隔离机制导致的快照读问题,mysql-connector默认关闭自动提交,且InnoDB存储引擎默认的隔离级别为可重复读(REPEATABLE READ)。你在循环外就建立了数据库连接,整个查询过程都在同一个未提交的事务内,每次查询读到的都是事务启动时的快照数据,不会感知到其他事务提交的字段更新。

解决方法

任选以下一种方案修改即可:

  • 每次查询完成后手动提交事务:在cursor.fetchone()执行完成后添加一行connection.commit(),主动结束当前事务,下一次查询会启动新事务读取最新已提交数据
  • 建立连接时开启自动提交,修改连接初始化代码,新增autocommit=True参数:
connection = mysql.connector.connect(host='localhost',
                                        database='minecraft',
                                        user='root',
                                        password='password',
                                        autocommit=True)
  • 调整MySQL全局/会话事务隔离级别为读已提交(READ COMMITTED),该方案需要修改数据库配置,仅适合固定运行环境的场景,临时脚本不推荐使用。

可选优化建议

  • 无需每次循环都新建cursor,可在循环外创建一次cursor重复使用,降低资源消耗
  • 写文件后添加file.flush()操作,避免程序意外退出时缓存内的日志未写入磁盘
  • 目前代码sleep间隔为0.1秒,每秒仅查询10次,会漏掉一半的更新,若要采集全量每秒20次的更新,可将sleep间隔调整为0.05秒,或根据数据库负载调整查询频率。

内容的提问来源于stack exchange,提问作者Konstanius EU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:01