此函数用于创建数据库连接池,并支持 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
Python 数据库连接池创建函数 - 支持Oracle、MSSQL、MySQL 和 Redis 缓存

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

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