【问题标题】:Python Mysql-Connector. Which is better connection.close() or connection.disconnect() or connection.shutdown()Python Mysql 连接器。哪个更好 connection.close() 或 connection.disconnect() 或 connection.shutdown()
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 2010-11-10
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多