PyMySQL 返回 old/snapshot values/not 重新运行查询?

PyMySQL returning old/snapshot values/not rerunning query?

我正在使用 pymysql.cursors 和一个简化的代码示例,它从 table 加载一行并每秒打印一次:

#!/usr/bin/env python3
import pymysql.cursors
import time

conn = pymysql.connect(host='localhost',
     # credentials etc.
     cursorclass=pymysql.cursors.DictCursor)

while True:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM state limit 1;")
        vals = cursor.fetchone()
        print (vals)
        time.sleep(1)

state 是一个 table,在 MariaDb 数据库中只有一行。

虽然这是 运行,但如果我启动 MySQL 客户端并更改 table 的内容,此脚本会愉快地不断输出原始值;即它显然没有咨询数据库(!)。

我是 Python 的新手而且我绝对是 Py 的新手MySQL,所以如果这是一个愚蠢的问题但我有 RTM 一点而且它只是看起来很奇怪。

我不明白为什么这是必要的,但您可以通过

来解决
  1. autocommit=True 添加到 connect() 参数中。

  2. cursor.execute()命令后调用conn.commit()

似乎它在默认情况下以快照或其他方式启动事务。我(紧张地!)在 pymysql 存储库上提交了一个 issue,因为我在这里没有听到任何消息。立即关闭并附上解释

It's repeatable read

如果有人知道比使用 autocommit 更好的方法,请告诉我。