mysql/python—提交的更改不会出现在循环中

vs3odd8k  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(360)

使用mysql connector/python,我有一个循环,它每2秒钟检查一个值是否有变化。没有所有的肉,这里是循环(打印是为了测试的目的:

try:
   while True:
       request = database.get_row(table="states", wherecol="state", whereval="request_from_interface")[0]
       print(request.value)
       time.sleep(2)
except KeyboardInterrupt:
   pass

# back to normal operation

get\u row是一个简单的select查询,它返回namedtuple fetchall(因此结尾的[0]将永远只有一行)。
问题是一旦它得到初始值,即使我改变它,它也会不断返回该值。例如,如果它是“0”开始,它会一直打印“0”,即使我去adminer并更改它,即使我打开一个新终端并更改它并提交它。我尝试将查询缓存大小设置为0,但仍然没有成功。我以为这是个问题,但也不是。如果我改变它,重新连接,我看到了变化,但我不知道为什么它不会改变,而在程序中。有什么想法吗?
编辑:如果它出现了,是的,我会关闭光标并在每次调用时抓住一个新的光标。

ymdaylpp

ymdaylpp1#

innodb的默认隔离级别是repeatable read。这意味着后续的 SELECT 语句将读取事务中第一个语句建立的相同快照。尽管您正在打开和关闭游标,但很可能是在事务中这样做的,因此您正在反复读取已建立的快照。或者 ROLLBACK 或者 COMMIT 结束当前事务,以便可以读取快照拍摄后提交的值。

相关问题