Python solving _mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') when using db models
Python solving _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 检查打开的连接,如果关闭则重新打开它
已找到一些解决方案并且听起来很清楚 possible solution and here about closing and opening cursors。
但是我们使用的是 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()
这是一个无法修复的错误,您可以在 Django docs 中看到
对于解决方法,如果您的程序将长时间闲置,您只需关闭连接即可。
from django.db import connection
# DO SOMETHING TO THE DATABASE
connection.close()
所以我们的 python 程序 运行 陷入了这些错误 _mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
。问题是程序访问数据库,然后在 mysql connection timeout
之后进行大量爬行以返回结果......然后为时已晚。
按逻辑有 2 个解
- 增加
mysql connection timeout
但这不是选择 - python 检查打开的连接,如果关闭则重新打开它
已找到一些解决方案并且听起来很清楚 possible solution and here about closing and opening cursors。
但是我们使用的是 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()
这是一个无法修复的错误,您可以在 Django docs 中看到 对于解决方法,如果您的程序将长时间闲置,您只需关闭连接即可。
from django.db import connection
# DO SOMETHING TO THE DATABASE
connection.close()