类方式封装
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