python - Python 解决 _mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') when using db models
问题描述
所以我们的python程序遇到了这些错误_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
。问题是程序访问数据库,母鸡做了很多爬网,然后返回结果mysql connection timeout
......然后为时已晚。
按逻辑有2个解决方案
- 增加
mysql connection timeout
,但这不是选择 - 让python检查打开的连接,如果关闭则重新打开它
已经找到了一些解决方案,并且听起来很清楚可能的解决方案,这里关于关闭和打开游标。
但是我们正在使用来自 django 的模型 .. 我不知道在哪里实现check for a connection and reconnect of the connectin is lost
检查逻辑。
问题:在使用模型时,我在哪里以及如何实现所描述的逻辑以重新连接到丢失的数据库连接?(是否有某种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()
推荐阅读
- php - 在每个给定的时间段内运行相同的脚本,但使用不同的变量
- css - 如何定位子元素的相邻兄弟元素?
- unity3d - 在任何其他 AR 库中是否有类似于 ARCore 的锚点和姿势的东西
- istio - 解码 JWT 并将“sub”放入请求标头中
- c# - MSI 卸载失败
- visual-studio - 在发布期间如何使用环境变量和 appSettings 文件?
- video - mp4 视频旋转元数据删除
- python - 张量流概率错误:AttributeError:模块'tensorflow_probability'没有属性'distributions'
- go - Golang libphonenumber
- android - 任务':app:preDebugBuild'的Flutter-Execution失败