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

Python调用MySQL执行SELECT查询时rowcount值不更新不符合预期

问题原因

这是MySQL默认的事务机制导致的:

  • 你使用的数据库连接默认关闭了自动提交,所有查询都默认运行在同一个未主动提交的事务中
  • InnoDB引擎默认的REPEATABLE READ(可重复读)隔离级别下,同一个事务内的所有查询都会读取事务启动时的快照,自然看不到其他连接(比如你手动修改表数据的客户端)提交的最新修改
  • 重启应用会重建数据库连接、开启新事务,所以能读到最新数据,完全符合你描述的症状

解决方案

有两种常用修复方案,任选其一即可:

方案1:创建连接时开启自动提交

在初始化mydb数据库连接的代码中增加autocommit=True参数,示例:

import mysql.connector
mydb = mysql.connector.connect(
  host="你的数据库地址",
  user="你的用户名",
  password="你的密码",
  database="你的库名",
  autocommit=True # 新增这行开启自动提交
)

开启后每次查询执行完会自动提交事务,每次查询都会读取最新的快照数据。

方案2:每次查询后手动提交事务

修改你的mysqltimedcheck函数,每次执行SELECT语句后主动提交当前事务,同时建议用完游标后主动关闭避免资源泄漏,修改后代码如下:

def mysqltimedcheck():
    cursor = mydb.cursor(buffered=True) 
    window.after(1500, mysqltimedcheck)
    cursor.execute("SELECT * FROM alerts WHERE shown =  0") 
    mydb.commit() # 新增行:提交当前事务
    rc = cursor.rowcount
    print(rc)
    cursor.close() # 新增行:关闭游标释放资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:03