'Python的MySqlDB未能更新'

2024-10-01 13:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

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

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

编辑:python脚本只查询表。该表的更新由tomcatwebapp使用autocommit上设置的JDBC执行。在


Tags: 脚本数据库编辑dbserverconnectpwdcon
2条回答

这是一个InnoDB表,对吧?InnoDB是事务存储引擎。将autocommit设置为true可能会修复此行为。在

conn.autocommit(True)

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

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

本页详细解释了这一点:http://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html

我通过跑步来解决这个问题

c.execute("""set session transaction isolation level READ COMMITTED""")

在我读书的早期。其他线程的更新现在确实通过了。在

在我的例子中,我保持连接打开很长时间(在mod_python内部),所以其他进程的更新根本看不到。在

相关问题 更多 >