Python在使用db模型时解决了&#mysql#异常。OperationalError:(2006年,';mysql服务器已离开';)

Python在使用db模型时解决了&#mysql#异常。OperationalError:(2006年,';mysql服务器已离开';),python,python-3.x,mysql-python,Python,Python 3.x,Mysql Python,因此,我们的python程序遇到了这些错误\u mysql\u异常。OperationalError:(2006,“mysql服务器消失了”)。问题是程序访问数据库,然后在mysql连接超时后进行大量爬网以返回结果。。。然后就太晚了 按照逻辑,有两种解决方案 增加mysql连接超时时间,但这不是选项 让python检查是否存在打开的连接,如果已关闭,则重新打开它 已经找到了一些解决方案,听起来清晰明了 然而,我们使用的是来自django的模型。。我不知道在哪里执行逻辑来检查连接,连接的重新连

因此,我们的python程序遇到了这些错误
\u mysql\u异常。OperationalError:(2006,“mysql服务器消失了”)
。问题是程序访问数据库,然后在
mysql连接超时后进行大量爬网以返回结果。。。然后就太晚了

按照逻辑,有两种解决方案

  • 增加mysql连接超时时间,但这不是选项
  • 让python检查是否存在打开的连接,如果已关闭,则重新打开它
已经找到了一些解决方案,听起来清晰明了

然而,我们使用的是来自django的模型。。我不知道在哪里执行逻辑来检查连接,连接的重新连接丢失了检查

问题:在何处以及如何实现所述逻辑,以便在使用模型时重新连接到丢失的db连接?(是否存在某种要访问的INITCONNECT事件)

示例代码

from django.db import models

class Domain(models.Model):
    name = models.CharField(max_length=100)
    domain = models.CharField(max_length=100, blank=True, null=True)


如果关闭连接,django将在需要查询数据库时自动重新打开连接

因此,如果您知道问题出现在某个函数中,无论是否有视图,您都可以在该函数开始之前或开始时关闭连接:

from django.db import connection 
...
connection.close()

这是一个无法修复的bug,正如您在 对于解决方法,如果您的程序将长时间处于空闲状态,您只需关闭连接即可

from django.db import connection
# DO SOMETHING TO THE DATABASE
connection.close()

你爬得怎么样?您是将其作为视图的一部分运行并等待该视图返回,还是使用消息队列将任务后台化,或者可能向类似于scrapyd的对象发出RPC?如果使用db模型,我们将如何添加这一点?例如,我们将定义一个模型,并在代码中使用
brand=brand.objects.get(code=spider.brand\u code)