Python 数据库连接池创建函数 - 支持Oracle、MSSQL、MySQL 和 Redis 缓存
此函数用于创建数据库连接池,并支持 Oracle、MSSQL 和 MySQL 等数据库类型。可以设置连接池的大小和最大溢出数,同时还支持 Redis 缓存的连接池。创建连接池时需要传入数据库的 IP、端口、SID、用户名和密码等参数,缓存的 IP、端口、用户名和密码等参数也可以选择传入。如果连接池的连接数被用完,则会自动创建新的连接,直到达到最大溢出数。如果需要禁用连接池,则可以设置 db_connect 参数为 1。
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
_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
_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
_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
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
原文地址: https://www.cveoy.top/t/topic/nuFN 著作权归作者所有。请勿转载和采集!