我正在使用 pymysql.cursors
和一个从表中加载一行并每秒打印一次的简化代码示例是:
#!/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 是 MariaDb 数据库中具有单行的表。
现在,如果我启动 MySQL 客户端并更改表的内容,则该脚本正在运行时,此脚本会愉快地不断抽出原始值;即它显然没有咨询数据库(!)。
我是 Python 新手,而且我绝对是 PyMySQL 新手,所以如果这是一个愚蠢的问题,那么 apols 但我有 RTM有点,只是看起来很奇怪。
最佳答案
我不明白为什么这是必要的,但你可以通过任何一种方式解决它
将
autocommit=True
添加到connect()
参数中。在
cursor.execute()
命令之后调用conn.commit()
。
它似乎在默认情况下以快照或其他方式启动事务。我(紧张地!)提交了一份 issue在 pymysql repo 上,因为我在这里没有听到任何消息。立即关闭并附上解释
It's repeatable read
如果有人知道比使用 autocommit
更好的方法,请告诉我。
关于python - PyMySQL 返回旧/快照值/不重新运行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569457/