【发布时间】:2021-05-13 00:04:30
【问题描述】:
我有一个问题,希望有人可以帮助我。
为了给你一些上下文,想象一个这样的循环:
while True:
conn = mysql.connector.connect(**args) #args without specifying poolname
conn.cursor().execute(something)
conn.commit()
conn.cursor.close()
#at this point what is better:
conn.close()
#or
conn.disconnect()
#or
conn.shutdown()
在我的情况下,我使用的是 conn.close() 但经过很长时间执行后,脚本总是出错:
mysql.connector.errors.OperationalError: 2013 (HY000): Lost connection to MySQL server during query
显然我超过了 mysql 连接的超时时间,默认情况下为 8 小时。但是看看循环,它会在每次迭代中创建和关闭新的连接。我很确定游标的执行时间不会超过一个小时。
所以问题是:close() 方法不会关闭连接吗?我应该使用 disconnect() 还是 shutdown() 代替?使用其中一种有什么区别。
我希望我已经很好地解释了自己,最好的问候!
【问题讨论】:
-
我认为这个错误与您关闭连接的方式无关;错误发生在此之前很久。有关其他一些可能性,请参阅Lost connection to MySQL server during query。您没有发布您的实际查询或连接参数或任何其他可能阐明可能导致问题的内容,因此很难更确定。
-
@Booboo 嗨,感谢您的回复。由于私人政策,我无法发布查询或参数。在任何情况下,该脚本都可以正常工作,并且执行它应该做的事情(将寄存器插入数据库)。问题是,经过很长时间的执行,我得到了那个错误。当我从错误点再次重新运行脚本时,它可以工作,直到再次执行很长时间,然后再次出现相同的错误。我添加了一些登录功能,以准确了解它的工作时间。
-
但是你每次都得到新的连接并且没有使用池,对吗?
-
@Booboo 完全正确
-
我不是专家,但我认为如果关闭连接出现问题,症状可能是您最终可能会用完连接,并且错误会出现在
connect,不是在您已成功完成连接后的查询期间。但是,为什么您不对所有查询重复使用相同的连接呢?
标签: python mysql mysql-connector mysql-connector-python mysql-connect