开始接触Django只有一个多月的时间,而且一开始完全是在修改别人的代码,一个一个问题的改,感觉没怎么自己没太大的进步。最近来了一个新的需求:“让Django实现数据库长连接”,网上找了很多资料也没找到说名Django数据库长连接的,Django的文档也里里外外的找了一遍,可就是没提到数据库长连接的。于是开始看Django内部数据库相关的代码,发现可以采用下述方式实现数据库长连接。
# Register an event that closes the database connection
# when a Django request is finished.
def close_connection(**kwargs):
for conn in connections.all():
conn.close()
signals.request_finished.connect(close_connection)
上述是Django的一段数据库相关代码,可以在\django\db\__init__.py中找到。
如果不希望Django在每次请求结束以后都关闭所有的连接,可以将上述最后一行代码注释。
经过测试,这样是可以达到保持连接的要求了。但是这种修改Django内部代码的方式过于霸道了,所以继续研究和最后一行代码相关的Signal对象,发现其中还有一个disconnect方法,对应实现取消信号关联,所以可以采用在django项目中的__init__.py文件中加入如下代码来实现保持数据库长连接的非非霸道操作
from django.core import signals
from django.db import close_connection
# 取消信号关联,实现数据库长连接
signals.request_finished.disconnect(close_connection)
然后在启动django项目以后就可以使数据库连接保持。
好运吧!