使用cursor.execute()时出现MySQLdb错误

时间:2010-12-14 00:43:54

标签: python mysql

我正在使用python,特别是使用MySQLdb来填充数据库,尽管直到最近工作的代码在移动服务器工作之后才会出错:

代码是:

cursor.execute("""SELECT Entry, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P FROM evaluation""")

result = cursor.fetchall()

for record in result:
    codeno=int(str(record[15]))
    status, progress, reprocessing = RepStatus_new.get_status(code=codeno, proj_tag=str(record[16]),cache_dir="cache", prod_type="g1")
    cursor.execute("""UPDATE evaluation SET M=%s WHERE A LIKE %s""",(progress, int(str(record[15]))))

,出现的错误是:

File "mySQLtest.py", line 165, in <module>
    cursor.execute("""UPDATE evaluation SET M=%s WHERE A LIKE %s""",(progress, int(str(record[15]))))
  File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 166, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib64/python2.5/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')

我不确定这是哪里出错的,因为我说这段代码直到最近才起作用。如果有人有任何建议,他们将不胜感激! (我用字母替换变量来帮助读取能力!)

数据库连接正确,因为我可以在cursor.fetchall()之后输出“结果”

提前致谢

1 个答案:

答案 0 :(得分:3)

这是一个快速修复,但更改innodb_lock_wait_timeout可能会暂时推迟“超出锁定等待超时”问题。见doc

当您“移动服务器”时,MySQL版本,引擎或配置是否有可能发生变化?

阅读SHOW ENGINE INNODB STATUS的结果会提醒您最近的锁定问题。

上次当我“移动服务器”时,我看到了这一点,原因是因为冲突/重复的脚本/ crons试图击中相同的表。

无论如何,您可能希望将其推送到serverfault。