python 使用cx_oracle

本文介绍了如何在Python中使用cx_Oracle模块调用Oracle存储过程,强调了入参可以接受Python类型,而出参需使用cx_Oracle指定的数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 模块方法


cx_oracle

#引入模块
import cx_Oracle
#创建连接
connects = cx_Oracle.connect('innpay/innpay@orcl')
#打开游标
cursors = connects.cursor()
#定义一条SQL
workdate_sql = '''select cdate from work_day t
where
--截止当天最后一个工作日最早的一个工作日
t.cdate >=
(select max(cdate) from work_day t where t.work = 'Y' and t.cdate <
(select min(cdate) from work_day t where t.work ='Y' and t.cdate >= '20161006'))
--截止包含当天最后一个工作日
and t.cdate < (select min(cdate) from work_day t where t.work ='Y' and t.cdate >= '20161006')'''
#执行一条SQL
workdate_list_cursor = cursors.execute(workdate_sql)
#将结果存入到本地元组
all_rows = workdate_list_cursor.fetchall()
#至此获取到列表值
print all_rows
[('20160930',), ('20161001',), ('20161002',), ('20161003',), ('20161004',), ('20161005',), ('20161006',), ('20161007',)]
#插入数据
1.定义可绑变量的SQL

Mtools_guocai_db_insert_sql ='''insert into YLJG_CHECK(
SERIAL_NO,ORDER_NO,CHANNEL_CODE,TRANSMSN_DATE_TIME,PAY_TYPE,
TRANS_AMT,REFUND_AMT,FEE_AMT,SETT_AMT,SEET_ARREARS_AMT)values(
:serial_no,:order_no,decode(:channel_code,'支付宝支付','gc_ali','微信支付','gc_wx','gc_unknow'),
:transmsn_date_time,decode(:pay_type,'支付宝支付','gc_ali','微信支付','gc_wx','gc_unknow')
:trans_amt,:refund_amt,:fee_amt,:sett_amt,:sett_arrears_amt)''' 
2.绑定变量

bind_values = {'serial_no':row_values[0],'order_no':row_values[2],'channel_code':row_values[3].encode('utf8'),
'trans_amt':row_values[8],'refund_amt':row_values[9],'fee_amt':row_values[10],'sett_amt':row_values[11],
'transmsn_date_time':row_values[5],'pay_type':row_values[7].encode('utf-8'),
'sett_arrears_amt':row_values[12]}

3.执行SQL
cursors.execute(Mtools_guocai_db_insert_sql,bind_values)
#此处注意使用数据库连接的返回对象而非游标对象
db.commit()

调用存储过程

存储过程注意入参可以使用python类型接收数据,但出参必须用cx_oracle数据类型.

  • cx_oracle 数据类型
    image_1av8798a5dgq141d15l6hnu7km9.png-18.9kB
  • demo
    proc_in_date = sett_date
    proc_out_rst = cursors.var(cx_Oracle.NUMBER)
    proc_out_msg = cursors.var(cx_Oracle.STRING)
    logging.info('6.将国采和本地交易中被撤销的交易过滤掉')
    returns = cursors.callproc('pkg_balance.pro_trans_gc_check1', (proc_in_date,proc_out_rst,proc_out_msg))
    logging.info('6.国采交易与本地交易相互比对完成 %d:%s' %(proc_out_rst.getvalue(),changeCode(proc_out_msg.getvalue()) ))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值