python - MySQL/Python -- 提交的更改未出现在循环中

标签 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是一个简单的选择查询,它返回namedtuple fetchall(因此末尾的[0],它只会是一行)。

问题是,一旦它获得初始值,即使我更改它,它也会继续返回该值。例如,如果启动时为“0”,即使我转到管理员并更改它,即使我打开一个新终端并更改它并提交它,它也会继续打印“0”。我尝试将 query_cache_size 设置为 0,但仍然没有成功。我以为这是一个提交问题,但事实也不是这样。如果我更改它并重新连接,我会看到更改,但我不确定为什么它在程序中不会更改。有什么想法吗?

编辑:如果它出现,是的,我正在关闭光标并在每次调用时抓取一个新光标。

最佳答案

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

关于python - MySQL/Python -- 提交的更改未出现在循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51833452/

相关文章:

Python - Pandas — 如何检查 DataFrame 是按哪一列分组的?

mysql - 本地MySQL数据库登录错误: Access denied for user 'root' @'localhost' (using password: YES)

mysql - 2.4 连接远程数据库

java - Python 多态 VS JAVA 多态

python-3.x - 在 RobotFramework 中截断 Post 请求的日志记录

python - Numpy 检查是否存在每行 < 0 的解决方案?

java - Python 中的静态初始化器

python - Python中基于字符串/整数序列的聚类和距离/相异矩阵

php - mysql 如果其他什么都不做

python-3.x - 'Word2Vec' 对象没有属性 'index2word'