python封装Oracle操作(类方式)

类方式封装

import cx_Oracle
import pprint,traceback


__version__=2.0

class OracleUtil:
    def __init__(self):
        self._ou_conn=None
        self._ou_rowcount=0

    def connect(self,user,password,dsn,enconding='utf-8'):
        '''
        连接数据库
        user:用户名,
        password:密码,
        dsn:ip:port/sid,
        enconding:编码
        '''
        self._ou_conn=cx_Oracle.connect(user=user,password=password,dsn=dsn,encoding=enconding)
        # print('连接成功!')

    def close(self):
        '''
        关闭连接
        '''
        self._ou_conn.close()

    def queryall(self,sql,params=None):
        '''
        查询,返回查询的所有结果,类型:list
        '''
        rows=None
        try:
            cursor=self._ou_conn.cursor()
            # 调用prepare()方法,发送sql,并对sql进行预编译
            cursor.prepare(sql)
            # 调用execute(),不要传递sql语句,否则预编译sql无效,执行的还是execute()方法的sql
            if params==None:
                cursor.execute(None)
            else:
                cursor.execute(None,params)
            rows=cursor.fetchall()
            self._ou_rowcount=cursor.rowcount
        # 不要处理异常
        # except Exception as e:
        #     print(e)
        finally:
            cursor.close()
        return rows


    def queryone(self,sql,params=None):
        '''
        查询,返回一条结果,类型:tuple
        '''
        row=None
        try:
            cursor=self._ou_conn.cursor()
            # 调用prepare()方法,发送sql,并对sql进行预编译
            cursor.prepare(sql)
            # 调用execute(),不要传递sql语句,否则预编译sql无效,执行的还是execute()方法的sql
            if params==None:
                cursor.execute(None)
            else:
                cursor.execute(None,params)
            row=cursor.fetchone()
            self._ou_rowcount=cursor.rowcount
        # 不要处理异常
        # except Exception as e:
        #     print(e)
        finally:
            cursor.close()
        return row


    def update(self,sql,params=None):
        '''
        执行insert、update、delete语句
        sql:insert、update、delete语句
        params:sql语句的参数
        '''
        cursor=self._ou_conn.cursor()
        try:
            # 调用prepare()方法,发送sql,并对sql进行预编译
            cursor.prepare(sql)
            if params:
                cursor.execute(None,params)
            else:
                cursor.execute(None)

            self._ou_rowcount=cursor.rowcount

        finally:
            cursor.close()
        return self._ou_rowcount

    def commit(self):
        '''
        事务提交
        '''
        self._ou_conn.commit()

    def rollback(self):
        '''
        事务回滚
        '''
        self._ou_conn.rollback()

    def getRowcount(self):
        return self._ou_rowcount

测试

if __name__ == "__main__":
    ou=OracleUtil()
    ou.connect('scott','tiger','127.0.0.1:1521/oradb','utf-8')

    # ou2=OracleUtil()
    # ou2.connect('scott','tiger','169.150.254.100:1521/oradb','utf-8')
    try:

        result=ou.queryall('select * from emp where ename=:ename and job=:job',{'ename':'ALLEN','job':'SALESMAN'} )
        print('查询结果数:',ou.getRowcount())
        pprint.pprint(result)
        print('-'*50)
        result=ou.queryall('select * from dept where 1=1')
        print('查询结果数:',ou.getRowcount())
        pprint.pprint(result)

        print('-'*50)

        # result=queryall('select * from dept where deptno=:1',[10])
        result=ou.queryone('select * from dept where deptno=:1',[10])
        print('查询结果数:',ou.getRowcount())
        pprint.pprint(result)

        # params={'id':'1','snumber':'201908190001','total':'90'}
        # num=ou.update('insert into orders (id,snumber,total) values (:id,:snumber,:total)',params)
        # print('影响的行数:',ou.getRowcount())

        # params={'id':'1','name':'篮球','price':'50'}
        # ou.update('insert into order_goods (id,name,price) values (:id,:name,:price)',params)
        # print('影响的行数:',num)

        # # params={'id':'2','name':'足球','price':'40'}
        # ou.update("insert into order_goods (id,name,price) values ('2','足球','40')")
        # print('影响的行数:',num)

        # ou.commit()
    except BaseException as e:
        ou.rollback()
        # 打印异常详细信息
        traceback.print_exc()
        # 将异常的详细信息,作为字符串返回
        # print(traceback.format_exc())
        print('报错')
    finally:
        ou.close()

原文出处:/show_1EF3uYu8CMSP.html