使用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,仍然没有运气。我认为这是一个提交问题,但也不是。如果我更改并重新连接,我会看到更改,但我不确定为什么它在程序中不会发生变化。有什么想法吗?
编辑:如果它出现,是的我关闭光标并在每次通话时抓住一个新光标。
答案 0 :(得分:0)
InnoDB的默认isolation level为REPEATABLE READ。这意味着后续的一致SELECT
语句将读取事务中第一个建立的相同快照。虽然您正在打开和关闭游标,但您可能在事务中执行此操作,因此您一遍又一遍地阅读已建立的快照。 ROLLBACK
或COMMIT
可以结束当前事务,以便您可以读取拍摄快照后提交的值。