Python 创建数据库连接池函数 - 支持 Oracle, MSSQL, MySQL 和 Redis 缓存
创建数据库连接池的函数
def create_pool(*args, **kw): # 定义内部函数,用于创建连接池 def _create_pool(db_ip = None, db_port = 0, db_sid = None, db_user = None, db_passwd = None, db_connect = 1, dbpool_size = 1, db_type = 'oracle', max_overflow = 0): _pool = None db_type = db_type.lower() # 将数据库类型转换为小写
# 判断是否禁用连接池
if db_connect == 1:
params = {'poolclass':NullPool}
log.info('DB pool connect is disabled')
else:
params = {'pool_size':dbpool_size, 'max_overflow':max_overflow}
log.info('DB pool connect size is {}, overflow is {}'.format(dbpool_size, max_overflow))
# 根据不同数据库类型创建连接池
if db_type == 'oracle':
import cx_Oracle as dbModule # 导入Oracle数据库驱动
_pool = dbPoolManager(dbModule, **params)
connstr = '{}:{}/{}'.format(db_ip, db_port, db_sid)
_pool.set_connect(db_user, db_passwd, connstr, threaded = True) # 设置连接参数
elif db_type == 'mssql':
import pyodbc as dbModule # 导入Microsoft SQL Server数据库驱动
_pool = dbPoolManager(dbModule, **params)
connstr = 'DRIVER={{SQL Server}};SERVER={};port={};DATABASE={};UID={};PWD={};TDS_Version=8.0'.format(
db_ip, db_port, db_sid, db_user,
db_passwd)
_pool.set_connect(connstr, unicode_results=True) # 设置连接参数
elif db_type == 'mysql':
import MySQLdb as dbModule # 导入MySQL数据库驱动
_pool = dbPoolManager(dbModule, **params)
_pool.set_connect(host=db_ip,
port=db_port,
user=db_user,
passwd=db_passwd,
db=db_sid,
charset='utf8'
) # 设置连接参数
# 如果有缓存数据库,则创建缓存连接池
if cache_ip and cache_port and cache_user and cache_passwd and cache_db:
import redis as dbModule # 导入Redis数据库驱动
cache_pool = dbPoolManager(dbModule, **params)
cache_pool.set_connect(host=cache_ip,
port=cache_port,
user=cache_user,
passwd=cache_passwd,
db=cache_db,
charset='utf8'
) # 设置连接参数
setattr(_pool, 'cache_pool', cache_pool) # 将缓存连接池设置为连接池的属性
# 设置数据库异常类
DatabaseException.DatabaseError = dbModule.DatabaseError
return _pool
函数的参数说明:
*args 表示任意数量的无名参数
**kw 表示任意数量的关键字参数
db_ip 表示数据库IP地址
db_port 表示数据库端口号
db_sid 表示数据库SID
db_user 表示数据库用户名
db_passwd 表示数据库密码
db_connect 表示是否启用连接池
dbpool_size 表示连接池大小
db_type 表示数据库类型,可选值为'oracle'、'mssql'、'mysql'
max_overflow 表示连接池中最多容纳的连接数
cache_ip 表示缓存数据库IP地址
cache_port 表示缓存数据库端口号
cache_user 表示缓存数据库用户名
cache_passwd 表示缓存数据库密码
cache_db 表示缓存数据库名称
原文地址: https://www.cveoy.top/t/topic/nuF1 著作权归作者所有。请勿转载和采集!