安装:
pip install django-pooldb
项目地址:
https://github.com/liangalien/django-pooldb
原文:
一、首先肯定要安装相应的模块的:
pip install pymysql
pip install DBUtils
二、在Django项目新建一个包(目录),这里直接建一个包:backends.mysql
三、mysql新建一个py文件,作为Django数据库引擎,名字好像必须用base.py
base.py内容如下:
#coding: utf-8
#author: Alien
#date : 2021年3月31日
import pymysql
from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
from DBUtils.PooledDB import PooledDB
_pool = None
class DatabaseWrapper(MySQLDatabaseWrapper):
def _set_autocommit(self, autocommit):
'''重写父类方法为空方法,因为PooledDB的conn没有autocommit属性,不重写就会报错
'''
pass
def get_new_connection(self, conn_params):
'''获取连接
'''
global _pool
if not _pool: # 未开辟连接池,仅启动的时候开辟一次
conn_params['creator'] = pymysql
_pool = PooledDB(**conn_params)
print('创建数据库连接池成功')
# 从连接池获取连接
return _pool.connection()
四、在settings.py,修改数据库引擎包
DATABASES = {
'default': {
'ENGINE': 'backends.mysql', #这里就是你新建的包路径
'NAME': DB_NAME,
'HOST': DB_HOST,
'PORT': DB_PORT,
'USER': DB_USER,
'PASSWORD': DB_PASSWD,
'OPTIONS': { #这里可以填写一些PooledDB的参数
'maxconnections': 100,
'autocommit': True
},
}
}
五、启动,就可以直接使用连接池了
六、补充:多数据源连接池
修改base.py内容为下述内容:
#coding: utf-8
#author: Alien
#date : 2021年3月31日
import pymysql
from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
from DBUtils.PooledDB import PooledDB
_pools = {}
class DatabaseWrapper(MySQLDatabaseWrapper):
def _set_autocommit(self, autocommit):
'''重写父类方法为空方法,因为PooledDB的conn没有autocommit属性,不重写就会报错
'''
pass
def get_new_connection(self, conn_params):
'''获取连接
'''
global _pool
if not _pools.get(self.alias):
conn_params['creator'] = pymysql
_pools[self.alias] = PooledDB(**conn_params)
print('创建数据库连接池成功: %s' % self.alias)
return _pools.get(self.alias).connection()
settings.py
DATABASES = {
'default': {
'ENGINE': 'library.db.backends.mysql',
'NAME': DB_NAME,
'HOST': DB_HOST,
'PORT': DB_PORT,
'USER': DB_USER,
'PASSWORD': DB_PASSWD,
'OPTIONS': {
'init_command': 'SET foreign_key_checks = 0;', #禁用外键约束
'maxconnections': 100,
'autocommit': True
},
},
'default2': {
'ENGINE': 'library.db.backends.mysql',
'NAME': DB_NAME2,
'HOST': DB_HOST2,
'PORT': DB_PORT2,
'USER': DB_USER2,
'PASSWORD': DB_PASSWD2,
'OPTIONS': {
'init_command': 'SET foreign_key_checks = 0;', #禁用外键约束
'maxconnections': 100,
'autocommit': True
},
},
}