自动化测试常用脚本-连接Oracle数据库

China☆狼群 提交于 2019-11-27 13:27:26
# 用于连接Oracle数据库# -*- coding:utf-8 -*-
import cx_Oracle as Oracle
from DBUtils.PooledDB import PooledDB


class OrclPool(object):
    """
    1) 这里封装了一些有关oracle连接池的功能;
    2) sid和service_name,程序会自动判断哪个有值,
        若两个都有值,则默认使用sid;
        若只想用其中一个,则只需要把另一个设置为空即可。如,service_name = ''
    3) 关于config的设置,只有 port 的值的类型是 int,其他均为str:
    """

    def __init__(self, config):
        self.conn = OrclPool.__get_conn(config)
        self.cur = self.conn.cursor()

    @staticmethod
    def __get_conn(conf):
        """
        一些 PoolDB 中可能会用到的参数,根据实际情况自己选择
        mincached:       启动时开启的空连接数量
        maxcached:       连接池最大可用连接数量
        maxshared:       连接池最大可共享连接数量
        maxconnections:  最大允许连接数量
        blocking:        达到最大数量时是否阻塞
        maxusage:        单个连接最大复用次数
        :param conf:        dict    连接Oracle的信息
        """
        host, port, sid, service_name = conf.get('host'), conf.get('port'), conf.get('sid'), conf.get('service_name')

        dsn = None
        if sid:
            dsn = Oracle.makedsn(host, port, sid=sid)
        elif service_name:
            dsn = Oracle.makedsn(host, port, service_name=conf.get('service_name'))

        __pool = PooledDB(Oracle, user=conf['user'], password=conf['passwd'], dsn=dsn, mincached=1, maxcached=5)
        return __pool.connection()

    def execute_sql(self, sql, args=None):
        """
        执行sql语句
        :param sql:     str     sql语句
        :param args:    list    sql语句参数列表
        """
        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()

    def commit_sql(self, sql):
        self.cur.execute(sql)
        self.conn.commit()

    def __del__(self):
        """
        在实例资源被回收时,关闭该连接池
        """
        self.cur.close()
        self.conn.close()


if __name__ == "__main__":
    orcl_cfg = {
        'user': 'username',  # 数据库用户名字
        'passwd': 'password',  # 数据库密码
        'host': '0.0.0.0',  # 数据库链接地址
        'port': 3000,  # 端口
        'sid': '',
        'service_name': 'tpi2hx',  # 数据库名字
    }
    orcl = OrclPool(orcl_cfg)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!