MySQL / Python - 提交的更改不会出现在循环中

时间:2016-09-18 20:39:34

标签: python mysql python-3.x mysql-connector-python

使用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_row是一个简单的select查询,它返回namedtuple fetchall(因此最后是[0],它只会是一行)。

问题是,一旦获得初始值,即使我更改它,它也会继续返回该值。例如,如果它是" 0"开始,它继续打印" 0"即使我去拜访并改变它,即使我打开一个新的终端并改变并提交它。我已经尝试将query_cache_size设置为0,仍然没有运气。我认为这是一个提交问题,但也不是。如果我更改并重新连接,我会看到更改,但我不确定为什么它在程序中不会发生变化。有什么想法吗?

编辑:如果它出现,是的我关闭光标并在每次通话时抓住一个新光标。

1 个答案:

答案 0 :(得分:0)

InnoDB的默认isolation levelREPEATABLE READ。这意味着后续的一致SELECT语句将读取事务中第一个建立的相同快照。虽然您正在打开和关闭游标,但您可能在事务中执行此操作,因此您一遍又一遍地阅读已建立的快照。 ROLLBACKCOMMIT可以结束当前事务,以便您可以读取拍摄快照后提交的值。