我正在尝试解决有关SQL数据库的超时问题。错误发生在:中
SQLUpdate="UPDATE scoutinfo SET patrolID=1 WHERE patrolID=%s"
当我收到这个错误时,执行这个命令似乎花费了太长时间。
mysql.connector.errors.DatabaseError: 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
是他们的一些设置,我需要在MySQL上更改,以允许python更新/删除数据库中的行。数据库相对较小(每个表中的行数<25(
SQLPatrolID="SELECT patrolID FROM patrols WHERE patrolname=%s"
mycursor.execute(SQLPatrolID,(DPatrol.get(), ))
myresult=mycursor.fetchall()
PatrolID=myresult[0][0]
print(PatrolID)
SQLUpdate="UPDATE scoutinfo SET patrolID=1 WHERE patrolID=%s"
mycursor.execute(SQLUpdate,(PatrolID, ))
mydb.commit()
print("Success!")
SQLDeletePatrol="DELETE patrolinfo WHERE patrolID=%s"
mycursor.execute(SQLDeletePatrol,(PatrolID, ))
mydb.commit()
你需要的任何额外信息我都可以乐意提供。
否。您的查询执行时间不会太长。获取要更新的元组的锁花费了太长时间。
这是什么意思?还有另一个查询/事务,同时更新完全相同的记录。它可能就在你的代码上,或者可能是一个不同的线程/应用程序。不过我认为这是第一种情况。
你可以通过检查以下表格来查看谁在拿锁:
INNODB_LOCK_WAITS
INNODB_LOCKS
或者,运行以下命令:
> show engine innodb status;
如果您使用INNODB引擎,这将起作用。你可能是。