这个脚本大概是三个月之前写的,当时也看了很多文章。具体是参考哪个文章也忘了,请原作者见谅。
整理出来,给有需要的人。
编程语言 | Python |
语言版本 | 3.5.3 |
实现功能 | oracle 连接池,解决频繁连接oracle数据库带来的连接资源耗费问题 |
程序托管 | Github |
程序链接 | orcl_pools.py |
修改日期 | 2018年10月9日 |
程序源码:
# -*- coding: utf-8 -*-
# @File: orcl_pools.py
# @Project: Tools
# @Date: 2018/9/28 10:27
# @Author: MaiXiaochai
import cx_Oracle as Oracle
from DBUtils.PooledDB import PooledDB
class OrclPool(object):
"""
这里封装了一些有关oracle连接池的功能
config样例:
orcl_cfg = {
'user': 'user_name',
'passwd': 'passwd_str',
'host': 'xxx.xxx.xxx.xxx',
'port': port_int,
'sid': 'sid'}
"""
__pool = None
def __init__(self, config):
self.conn = OrclPool.__get_conn(config)
self.cur = self.conn.cursor()
@staticmethod
def __get_conn(conf):
if OrclPool.__pool is None:
# mincached: 启动时开启的空连接数量
# maxcached: 连接池最大可用连接数量
# maxshared: 连接池最大可共享连接数量
# maxconnections: 最大允许连接数量
# blocking: 达到最大数量时是否阻塞
# maxusage: 单个连接最大复用次数
dsn = Oracle.makedsn(conf.get('host'), conf.get('port'), conf.get('sid'))
OrclPool.__pool = PooledDB(Oracle, user=conf['user'], password=conf['passwd'], dsn=dsn,
mincached=5, maxcached=30)
return OrclPool.__pool.connection()
def execute_sql(self, sql, args=None):
"""
执行sql语句
:param sql: str sql语句
:param args: list sql语句参数列表
:return:
"""
if args:
self.cur.execute(sql, args)
else:
self.cur.execute(sql)
def fetch_all(self, sql, args=None):
"""
获取全部结果
:param sql: str sql语句
:param args: list sql语句参数
:return: tuple fetch结果
"""
self.execute_sql(sql, args)
return self.cur.fetchall()