我正在尝试解决有关我的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()
您需要我提供的任何其他信息。
答案 0 :(得分:0)
不。您的查询执行时间不会太长。获取要更新的元组的锁定时间太长。
这是什么意思?还有另一个查询/事务,可同时更新完全相同的记录。它可能就在您的代码上,或者可能是另一个线程/应用程序。我认为这是第一种情况。
您可以通过检查以下表格来查看谁持有锁:
In [81]: df
Out[81]:
col_1 col_2 col_3
0 1 2 3
1 2 3 4
2 1 3 4
In [82]: hotencode(df)
Out[82]:
1 2 3 4
0 1 1 1 0
1 0 1 1 1
2 1 0 1 1
INNODB_LOCK_WAITS
或者,运行以下命令:
INNODB_LOCKS
如果您使用的是INNODB引擎,这将起作用。你可能是谁。