小编典典

Python的MySqlDB无法更新行

mysql

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

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 Web应用程序使用JDBC进行,该应用程序是在自动提交时设置的。


阅读 350

收藏
2020-05-17

共1个答案

小编典典

这是一个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

2020-05-17