使用cursor.execute()时出现MySQLdb错误
我正在使用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()之后输出“result”结果。
提前谢谢大家!
1 个回答
3
这是一个快速解决的方法,但调整 innodb_lock_wait_timeout
这个设置可能会暂时缓解“锁等待超时”的问题。具体可以查看这个文档。
你在“迁移服务器”时,MySQL的版本、引擎或配置有没有发生变化呢?
查看 SHOW ENGINE INNODB STATUS
的结果可以让你知道最近有没有锁定的问题。
我上次在“迁移服务器”时遇到这个问题,是因为有冲突或重复的脚本/定时任务试图同时访问同一张表。
无论如何,你可能想把这个问题转到 serverfault 上去讨论。