我正在使用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()之后输出“结果”
提前致谢
答案 0 :(得分:3)
这是一个快速修复,但更改innodb_lock_wait_timeout
可能会暂时推迟“超出锁定等待超时”问题。见doc。
当您“移动服务器”时,MySQL版本,引擎或配置是否有可能发生变化?
阅读SHOW ENGINE INNODB STATUS
的结果会提醒您最近的锁定问题。
上次当我“移动服务器”时,我看到了这一点,原因是因为冲突/重复的脚本/ crons试图击中相同的表。
无论如何,您可能希望将其推送到serverfault。