MySQL/Python -- 已提交的更改未出现在循环中
MySQL/Python -- committed changes not appearing in loop
使用 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 查询,它 returns namedtuple fetchall(因此最后的 [0],它只会是一行)。
问题是,一旦它获得初始值,即使我更改它,它也会一直返回该值。例如,如果开始是“0”,它会一直打印“0”,即使我去管理员那里更改它,即使我打开一个新终端并更改它并提交它。我已经尝试将 query_cache_size 设置为 0,仍然没有成功。我认为这是一个提交问题,但也不是。如果我更改它并重新连接,我会看到更改,但我不确定为什么它在程序中不会更改。有什么想法吗?
编辑:如果它出现,是的,我将关闭光标并在每次调用时抓取一个新光标。
默认isolation level of InnoDB is REPEATABLE READ。这意味着后续一致的 SELECT
语句将读取事务中第一个建立的相同快照。虽然您正在打开和关闭游标,但您可能是在一个事务中这样做,因此您会一遍又一遍地读取已建立的快照。 ROLLBACK
或 COMMIT
结束当前事务,以便您可以读取拍摄快照后提交的值。
使用 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 查询,它 returns namedtuple fetchall(因此最后的 [0],它只会是一行)。
问题是,一旦它获得初始值,即使我更改它,它也会一直返回该值。例如,如果开始是“0”,它会一直打印“0”,即使我去管理员那里更改它,即使我打开一个新终端并更改它并提交它。我已经尝试将 query_cache_size 设置为 0,仍然没有成功。我认为这是一个提交问题,但也不是。如果我更改它并重新连接,我会看到更改,但我不确定为什么它在程序中不会更改。有什么想法吗?
编辑:如果它出现,是的,我将关闭光标并在每次调用时抓取一个新光标。
默认isolation level of InnoDB is REPEATABLE READ。这意味着后续一致的 SELECT
语句将读取事务中第一个建立的相同快照。虽然您正在打开和关闭游标,但您可能是在一个事务中这样做,因此您会一遍又一遍地读取已建立的快照。 ROLLBACK
或 COMMIT
结束当前事务,以便您可以读取拍摄快照后提交的值。