MySQL server has gone away

问题

最近遇到个坑,在django中起了个定时器,周期性做一些检查任务,其中会使用到orm进行数据库访问。当程序运行一段时间后orm的查询会报错:

OperationalError: (2006, 'MySQL server has gone away')

分析

分析发现,原来是数据库的链接失效了,但是django其他view中的orm查询正常。原来在django每个request的开始和结束都会调用数据库链接的关闭动作,这样失效的链接永远都不会存在,也就不会报错了。
2018-10-09-16-57-34------

解决

我们可以使用django对于每个request的处理方式来解决这个问题,在每次查询数据之前都调用一下关闭动作。

from django.db import close_old_connections

...
close_old_connections()
#执行orm查询
...