我有一个脚本,它等待数据库中的某行更新:
con = MySQLdb.connect(server, user, pwd, db)
当脚本启动时,该行的值为"running"
,并等待该值变为"finished"
^{pr2}$
当我运行这个脚本时,它永远挂起。即使我在查询表时看到该行的值已更改为"finished"
,但脚本的打印输出仍然是"running"
。在
有没有我没有设置的设置?在
编辑:python脚本只查询表。该表的更新由tomcatwebapp使用autocommit上设置的JDBC执行。在
Tags:
这是一个InnoDB表,对吧?InnoDB是事务存储引擎。将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
我通过跑步来解决这个问题
在我读书的早期。其他线程的更新现在确实通过了。在
在我的例子中,我保持连接打开很长时间(在mod_python内部),所以其他进程的更新根本看不到。在
相关问题 更多 >
编程相关推荐