gpt4 book ai didi

Python MySqlDB 没有得到更新的行

转载 作者:IT老高 更新时间:2023-10-29 00:20:22 28 4
gpt4 key购买 nike

我有一个脚本等待数据库中的某些行被更新:

con = MySQLdb.connect(server, user, pwd, db)

脚本启动时,该行的值为"running",等待该值变为"finished"

while(True):
sql = '''select value from table where some_condition'''
cur = self.getCursor()
cur.execute(sql)
r = cur.fetchone()
cur.close()
res = r['value']
if res == 'finished':
break
print res
time.sleep(5)

当我运行这个脚本时,它会永远挂起。即使我在查询表时看到该行的值已更改为 "finished",但脚本的打印输出仍然是 "running"

有没有我没有设置的设置?

编辑:python 脚本只查询表。对表的更新是由一个 tomcat webapp 使用 JDBC 执行的,它是在 autocommit 上设置的。

最佳答案

这是一个 InnoDB 表,对吧? InnoDB 是事务性存储引擎。将 autocommit 设置为 true 可能会为您解决此问题。

conn.autocommit(True)

或者,您可以更改事务隔离级别。您可以在此处阅读更多相关信息: http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

此行为的原因是在单个事务中,读取需要保持一致。同一事务中的所有一致读取都读取由第一次读取建立的快照。即使您的脚本只读取表,这也被视为事务。这是 InnoDB 中的默认行为,您需要更改它或在每次读取后运行 conn.commit()。

此页面对此进行了更详细的解释:http://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html

关于Python MySqlDB 没有得到更新的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com