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

1 投票
1 回答
3318 浏览
提问于 2025-04-16 08:29

我正在使用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 上去讨论。

撰写回答