Python在使用db模型时解决了mysql#异常。OperationalError:(2006年,';mysql服务器已离开';)
因此,我们的python程序遇到了这些错误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的模型。。我不知道在哪里执行逻辑来检查连接,连接的重新连
\u mysql\u异常。OperationalError:(2006,“mysql服务器消失了”)
。问题是程序访问数据库,然后在mysql连接超时后进行大量爬网以返回结果。。。然后就太晚了
按照逻辑,有两种解决方案
- 增加mysql连接超时时间,但这不是选项
- 让python检查是否存在打开的连接,如果已关闭,则重新打开它
已经找到了一些解决方案,听起来清晰明了
然而,我们使用的是来自django的模型。。我不知道在哪里执行逻辑来检查连接,连接的重新连接丢失了检查
问题:在何处以及如何实现所述逻辑,以便在使用模型时重新连接到丢失的db连接?(是否存在某种要访问的INIT或CONNECT事件)
示例代码
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)