解决 django 数据库连接 MySql 超时

后台脚本操作数据库时,如果长时间没有与数据库交互,连接会被断开。

再次使用查询的时候,由于连接实质已断开,会提示以下错误:

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

解决方法:

from django.db import connections
# ....
# 在合适的时机,主动断开链接
# ... 
connections.close_all()

# 只有一个连接时,这样也一样
from django.db import connection
connection.close()

主动断开链接,是有状态标识的,所以再次使用时,会重新连接数据库。

MongoDb 也有类似解决方案

mongoengine 举例:

import time
from mongoengine import connection
# ...
# ...
# 在合适的位置调用,断开数据库,再次链接
connection.disconnect()
time.sleep(1)
connection.connect(db=settings.MONGODB_DB_NAME, host=settings.MONGODB_HOST, connect=False)