zoukankan      html  css  js  c++  java
  • 自动化测试常用脚本-连接Oracle数据库

    """
    用于连接Oracle数据库,使用前需确认系统已安装cx_Oracle库和oracle客户端
    cx_Oracle就可以在PyPI中下载,https://pypi.python.org/pypi,根据Python版本和系统位数进行下载
    Oracle客户端,百度找instantclient,根据系统确定好是下载32位的还是64位
    """
    # -*- 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)  # 获得连接池,Oracle连接信息
            self.cur = self.conn.cursor()  # 获取操作游标
    
        @staticmethod
        def __get_conn(conf):
            """
            :param config:        dict    连接Oracle的信息
            ————————————————————————
            maxconnections=6,   # 最大连接数,0或None表示不限制连接数
            mincached=2,        # 初始化时,连接池中至少创建的空闲连接。0表示不创建
            maxcached=5,        # 连接池中最多允许的空闲连接数,很久没有用户访问,连接池释放了一个,由6个变为5个,
                                # 又过了很久,不再释放,因为该项设置的数量为5
            maxshared=0,        # 在多个线程中,最多共享的连接数,Python中无用,会最终设置为0
            blocking=True,      # 没有闲置连接的时候是否等待, True,等待,阻塞住;False,不等待,抛出异常。
            maxusage=None,      # 一个连接最多被使用的次数,None表示无限制
            setession=[],       # 会话之前所执行的命令, 如["set charset ...", "set datestyle ..."]
            ping=0,             # 0  永远不ping
                                # 1,默认值,用到连接时先ping一下服务器
                                # 2, 当cursor被创建时ping
                                # 4, 当SQL语句被执行时ping
                                # 7, 总是先ping
    
            """
            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)  # 执行 SQL 语句
            return self.cur.fetchall()   # 返回执行的结果
    
       def fetch_one(self, sql, args=None):
            """
            获取全部结果
            :param sql:     str     sql语句
            :param args:    list    sql语句参数
            :return:        tuple   fetch结果
            """
            conn, cursor = self.__execute(sql, args)
            result = cursor.fetchone()
            self.__reset_conn(conn, cursor)
     
            return result
    
        def commit_sql(self, sql):
            self.cur.execute(sql)
            self.conn.commit()  # 用于SQL语句提交事务
    
        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': 'TESTDB',  # 数据库名字
        }
        orcl = OrclPool(orcl_cfg)
    
    
    
    

    部分内容参考:https://blog.csdn.net/maixiaochai/article/details/82986517

  • 相关阅读:
    linux下查看nginx,apache,mysql,php的编译参数
    Nginx重大漏洞,文件类型错误解析
    用C语言编写PHP扩展1(转)
    数字证书中keytool命令使用说明
    Nginx 日志文件切割
    推荐12款精心设计网站设计PSD模板
    分享9个最棒的代码片段资源网站
    强大的独立日期选择器(date picker)插件 Kalendae
    分享一个HTML5的drag and drop API实现的图片拖拽分组效果
    你真的很了解HTML标签吗? 试试这个超异类的HTML标签小测验吧!
  • 原文地址:https://www.cnblogs.com/chenri/p/12924818.html
Copyright © 2011-2022 走看看