django 数据库连接池 Django and SQLAlchemy


数据库连接池 Django and SQLAlchemy


在连接线程进行query之后, Django会自动的断开连接

例如在执行

q = Model.objects.all() 

当变量 “q” 回收的同时数据库也会关闭,我们可以使用 SQLAlchemy 来缓存 db connection。

使用 SQLAlchemy, 只有当前进程程序退出时, db connection 才会关闭

使用的步骤:

1 安装 Install SQL Alchemy

2 拷贝原始的 mysql backend的package, 用来修改

一般位置在 django.db.backends.mysql

拷贝之后,把这个pacakge加到 PYTHONPATH 中, 命名为 db_pool

DATABASE_ENGINE = 'db_pool' 

3 修改相关的db配置 Update settings.py and database settings

settings.py

这个是默认的超时时间
DATABASE_WAIT_TIMEOUT = 120

settings.py 中的设置与 db保持一致

4 修改package db_pool中的内容


try:
    from settings import DATABASE_WAIT_TIMEOUT
except ImportError:
    print u'DATABASE_WAIT_TIMEOUT not in settings.py, defaulting to 120.'
    DATABASE_WAIT_TIMEOUT = 120

import sqlalchemy.pool as pool 

Database = pool.manage(Database, recycle=DATABASE_WAIT_TIMEOUT-1) # must match or be less than wait_timeout in mysql 

if settings.DATABASE_HOST.startswith('/'):
    self.connection = Database.connect(port=kwargs['port'], unix_socket=kwargs['unix_socket'], user=kwargs['user'], db=kwargs['db'], passwd=kwargs['passwd'], use_unicode=kwargs['use_unicode'], charset='utf8')
else:
    self.connection = Database.connect(host=kwargs['host'], port=kwargs['port'], user=kwargs['user'], db=kwargs['db'], passwd=kwargs['passwd'], use_unicode=kwargs['use_unicode'], charset='utf8') 
Buy me a 肥仔水!