日期:2014-05-16  浏览次数:20555 次

Django实现数据库长连接

开始接触Django只有一个多月的时间,而且一开始完全是在修改别人的代码,一个一个问题的改,感觉没怎么自己没太大的进步。最近来了一个新的需求: “让Django实现数据库长连接”,网上找了很多资料也没找到说名Django数据库长连接的,Django的文档也里里外外的找了一遍,可就是没提到 数据库长连接的。于是开始看Django内部数据库相关的代码,发现可以采用下述方式实现数据库长连接。

[python] view plain copy
  1. #?Register?an?event?that?closes?the?database?connection ??
  2. #?when?a?Django?request?is?finished. ??
  3. def ?close_connection(**kwargs):??
  4. ????for ?conn? in ?connections.all():??
  5. ????????conn.close()??
  6. signals.request_finished.connect(close_connection)??

上述是Django的一段数据库相关代码,可以在\django\db\__init__.py中找到。

如果不希望Django在每次请求结束以后都关闭所有的连接,可以将上述最后一行代码注释。

经 过测试,这样是可以达到保持连接的要求了。但是这种修改Django内部代码的方式过于霸道了,所以继续研究和最后一行代码相关的Signal对象,发现 其中还有一个disconnect方法,对应实现取消信号关联,所以可以采用在django项目中的__init__.py文件中加入如下代码来实现保持 数据库长连接的非非霸道操作

[python] view plain copy
  1. from ?django.core? import ?signals??
  2. from ?django.db? import ?close_connection??
  3. ??
  4. #?取消信号关联,实现数据库长连接 ??
  5. signals.request_finished.disconnect(close_connection)??

然后在启动django项目以后就可以使数据库连接保持。好运吧!