Python的MySqlDB未获得更新行

ola*_*ndo 11 python mysql

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

con = MySQLdb.connect(server, user, pwd, db)
Run Code Online (Sandbox Code Playgroud)

当脚本启动时,行的值为"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)
Run Code Online (Sandbox Code Playgroud)

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

我有没有设置一些设置?

编辑:python脚本只查询表.表的更新由tomcat webapp执行,使用JDBC,在autocommit上设置.

Nad*_*mli 17

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

conn.autocommit(True)
Run Code Online (Sandbox Code Playgroud)

或者,您可以更改事务隔离级别.你可以在这里阅读更多相关信息: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