python封装Oracle操作(函数方式)

函数方式封装

import cx_Oracle
import pprint,traceback


__version__=1.1

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

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

def queryall(sql,params=None):
    '''
    查询,返回查询的所有结果,类型:list
    '''
    global _ou_rowcount
    rows=None
    try:
        cursor=_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()
        _ou_rowcount=cursor.rowcount
    # 不要处理异常
    # except Exception as e:
    #     print(e)
    finally:
        cursor.close()
    return rows


def queryone(sql,params=None):
    '''
    查询,返回一条结果,类型:tuple
    '''
    global _ou_rowcount
    row=None
    try:
        cursor=_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()
        _ou_rowcount=cursor.rowcount
    # 不要处理异常
    # except Exception as e:
    #     print(e)
    finally:
        cursor.close()
    return row


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

        _ou_rowcount=cursor.rowcount

    finally:
        cursor.close()
    return _ou_rowcount

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

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

测试代码:

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

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

        # print('-'*50)

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

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

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

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

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

原文出处:/show_1EF3uYtMpczO.html