python - PyMySQL 返回旧/快照值/不重新运行查询?

标签 python mysql pymysql

我正在使用 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有点,只是看起来很奇怪。

最佳答案

我不明白为什么这是必要的,但你可以通过任何一种方式解决它

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

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

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

It's repeatable read

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

关于python - PyMySQL 返回旧/快照值/不重新运行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569457/

相关文章:

javascript - 使用 Javascript 在 Mozilla 和 IE 中返回 NaN 的日期

java - 如何使用java程序知道数据库是否更新

Mysql `AND` 运算符

python - pyMySQL:如何检查连接是否已经打开或关闭

mysql - docker "mysqld: can' t 读取 '/etc/mysql/mysql.conf.d' 的目录(os errno 2 - 没有这样的文件或目录)”

相当于 GNU 'cat' 的 python 显示唯一行

python - 避免 DP 的尾递归 python

python - 使用 str.replace() 从 Pandas 数据框中的字符串中删除第 n 个字符

python - 在查询 PyMySQL 中使用 WHERE

python - 为什么在Python中对不同类型进行反转和排序?