Django实现数据库长连接
开始接触Django只有一个多月的时间,而且一开始完全是在修改别人的代码,一个一个问题的改,感觉没怎么自己没太大的进步。最近来了一个新的需求:“让Django实现数据库长连接”,网上找了很多资料也没找到说名Django数据库长连接的,Django的文档也里里外外的找了一遍,可就是没提到数据库长连接的。于是开始看Django内部数据库相关的代码,发现可以采用下述方式实现数据库长连接。
[python] view plaincopy- #?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文件中加入如下代码来实现保持数据库长连接的非非霸道操作
[python] view plaincopy- from?django.core?import?signals??from?django.db?import?close_connection??
- ??#?取消信号关联,实现数据库长连接??
- signals.request_finished.disconnect(close_connection)??
然后在启动django项目以后就可以使数据库连接保持。好运吧!