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, cache_ip=None, cache_port=None, cache_user=None, cache_passwd=None, cache_db=None): _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

return _create_pool
Python数据库连接池创建函数:支持Oracle、MSSQL、MySQL和Redis缓存

原文地址: https://www.cveoy.top/t/topic/nuFq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录