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

art*_*bot 10 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)
Run Code Online (Sandbox Code Playgroud)

state是MariaDb数据库中具有单行的表.

现在,当这个运行时,如果我启动一个MySQL客户端并更改表的内容,这个脚本可以快速地输出原始值; 即它显然没有咨询数据库(!).

我对Python很新,我绝对是PyMySQL的新手,所以如果这是一个愚蠢的问题,那么我会有一些问题,但我有点RTM,它看起来很奇怪.

art*_*bot 14

我不明白为什么这是必要的,但你也可以解决它

  1. 添加autocommit=Trueconnect()参数中.

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

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

这是可重复的阅读

如果有人知道比使用更好的东西autocommit让我知道.

  • 谢谢。这救了我的命。 (2认同)