【问题标题】:MySQL/Python -- committed changes not appearing in loopMySQL/Python——提交的更改没有出现在循环中
【发布时间】:2025-12-24 12:55:12
【问题描述】:

使用 MySQL 连接器/Python,我有一个循环,每 2 秒检查一次值的变化。没有所有的肉,这里是循环(打印用于测试目的:

try:
   while True:
       request = database.get_row(table="states", wherecol="state", whereval="request_from_interface")[0]
       print(request.value)
       time.sleep(2)
except KeyboardInterrupt:
   pass
# back to normal operation

get_row 是一个简单的选择查询,它返回namedtuple fetchall(因此末尾的[0],它只会是一行)。

问题在于,一旦它获得初始值,即使我更改它,它也会继续返回该值。例如,如果开始是“0”,即使我去管理员并更改它,即使我打开一个新终端并更改它并提交它,它也会继续打印“0”。我已经尝试将 query_cache_size 设置为 0,但仍然没有运气。我认为这是一个提交问题,但事实并非如此。如果我更改它并重新连接,我会看到更改,但我不确定为什么它在程序中不会更改。有什么想法吗?

编辑:如果它出现,是的,我正在关闭光标并在每次调用时抓取一个新光标。

【问题讨论】:

  • 做到了。如果您将其放在答案中,我很乐意接受。谢谢。

标签: python mysql python-3.x mysql-connector-python


【解决方案1】:

InnoDB 默认的isolation levelREPEATABLE READ。这意味着后续一致的SELECT 语句将读取事务中第一个创建的相同快照。尽管您正在打开和关闭游标,但您可能是在事务中执行此操作,因此您正在一遍又一遍地读取已建立的快照。 ROLLBACKCOMMIT 结束当前事务,以便您可以读取在拍摄快照后提交的值。

【讨论】:

    最近更新 更多