PyMySQL 返回旧/快照值/不重新运行查询?
Posted
技术标签:
【中文标题】PyMySQL 返回旧/快照值/不重新运行查询?【英文标题】:PyMySQL returning old/snapshot values/not rerunning query? 【发布时间】:2016-02-07 18:10:39 【问题描述】:我正在使用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 新手,所以如果这是一个愚蠢的问题,请提出建议,但我有一点 RTM,它看起来很奇怪。
【问题讨论】:
您是否在 MySQL 客户端中提交更改? 是的,我的客户端自动提交,我已经测试过了。 【参考方案1】:我不明白为什么这是必要的,但您可以通过任一方式解决它
将autocommit=True
添加到connect()
参数中。
在cursor.execute()
命令之后调用conn.commit()
。
似乎默认情况下它会在快照或其他东西处启动事务。我(紧张地!)在 pymysql repo 上提交了issue,因为我在这里没有听到任何消息。这立即关闭了解释
我是repeatable read
如果有人知道比使用autocommit
更好的东西,请告诉我。
【讨论】:
谢谢。这节省了我的时间。 你是我、我的国家和整个世界的英雄。这节省了我整个星期的时间。我也没有找到任何其他方法来防止这个错误。 非常感谢,这节省了我的时间以上是关于PyMySQL 返回旧/快照值/不重新运行查询?的主要内容,如果未能解决你的问题,请参考以下文章
exist 存在 Python操作mysql pymysql sql注入问题 # 39