Python Mysql-连接器。哪个更好 connection.close() 或 connection.disconnect() 或 connection.shutdown()

时间:2021-02-09 10:59:05

标签: python mysql mysql-connector mysql-connector-python mysql-connect

我有一个问题,希望有人能帮助我。

为了给你一些上下文,想象一个这样的循环:

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): 在查询过程中失去与 MySQL 服务器的连接

显然我超过了 mysql 连接的超时时间,默认情况下是 8 小时。但是看看循环,它在每次迭代中创建和关闭新连接。我很确定游标执行不会超过一个小时。

所以问题是:close() 方法不是关闭连接吗?我应该使用 disconnect() 还是 shutdown() 代替?使用其中一种有什么区别。

我希望我已经很好地解释了自己,最好的问候!

2 个答案:

答案 0 :(得分:0)

您的代码中可能存在问题。 通常,即使您使用循环, close() 每次都会工作。 但仍然尝试尝试和错误这三个命令,看看什么适合你的代码。

答案 1 :(得分:0)

The doc 说清楚

<块引用>

close() 是 disconnect() 的同义词。

对于从连接池中获取的连接,close() 不会 实际上关闭它但将它返回到池中并使其可用 用于后续连接请求

disconnect() 尝试发送 QUIT 命令并关闭套接字。它不会引发任何异常。 MySQLConnection.close() 是同义方法名,更常用。

要关闭连接而不先发送 QUIT 命令,请使用 关机()。

For shutdown

<块引用>

与 disconnect() 不同,shutdown() 关闭客户端连接而不 尝试首先向服务器发送 QUIT 命令。这样,就会 如果连接因某种原因中断,则不会阻止,例如 网络故障。

但我不明白你为什么得到Lost connection to MySQL server during query你可以查看这个讨论Lost connection to MySQL server during query

相关问题