mysql.connector.errors.DatabaseError:1205锁定等待超时

时间:2018-10-27 11:47:31

标签: python mysql

我正在尝试解决有关我的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()

您需要我提供的任何其他信息。

1 个答案:

答案 0 :(得分:0)

不。您的查询执行时间不会太长。获取要更新的元组的锁定时间太长。

这是什么意思?还有另一个查询/事务,可同时更新完全相同的记录。它可能就在您的代码上,或者可能是另一个线程/应用程序。我认为这是第一种情况。

您可以通过检查以下表格来查看谁持有锁:

  1. 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
  2. INNODB_LOCK_WAITS

或者,运行以下命令:

INNODB_LOCKS

如果您使用的是INNODB引擎,这将起作用。你可能是谁。