如何在Python的cx_Oracle连接中调用Oracle安全存储过程
调整后的Oracle连接与存储过程调用代码
没问题,我来帮你修改代码,实现连接后先调用指定安全存储过程的需求。核心就是在建立数据库连接之后、执行查询之前,先执行ef.applogin('1234')这个存储过程,具体实现如下:
def connect_oracle(): import cx_Oracle import pandas as pd # 数据库连接参数 ip = 'some_ip' port = 1521 SID = 'some_SID' username = 'user_name' password = 'password' # 构建DSN并建立连接 dsn_tns = cx_Oracle.makedsn(ip, port, SID) connection = cx_Oracle.connect(username, password, dsn_tns) try: # 创建游标对象,用于执行存储过程和SQL cursor = connection.cursor() # 调用安全存储过程ef.applogin,传入参数'1234' # callproc方法第一个参数是存储过程名,第二个是参数列表 cursor.callproc('ef.applogin', ['1234']) # 可选:如果存储过程需要提交事务才能生效,取消下面的注释 # connection.commit() # 执行查询语句 query = "SELECT * from table_name" df_ora = pd.read_sql(query, con=connection) finally: # 关闭游标和连接,确保资源释放 cursor.close() connection.close() return df_ora connect_oracle()
关键改动说明:
- 新增游标创建与存储过程调用步骤:用
connection.cursor()创建游标后,通过cursor.callproc()直接调用存储过程,参数以列表形式传入 - 添加
try...finally块确保游标和连接资源被正确释放,避免资源泄漏 - 简化了查询语句的写法(原三重引号写法也可行,这里只是更简洁)
注意事项:
- 请确认你的数据库账号拥有执行
ef.applogin存储过程的权限 - 验证参数
'1234'是该存储过程所需的正确凭证 - 如果存储过程包含输出参数,需要在调用时传入对应变量接收(根据你的描述,这里仅需传入输入参数即可)
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

