Python使用cx_Oracle模块操作Oracle数据库详解

桃夭
桃夭
发布时间:2026-10-12 | 2人浏览过
原创

本文详解Python如何通过cx_Oracle模块连接Oracle数据库。内容涵盖模块下载、连接配置(SID与Service Name区别)、SQL语句执行、变量绑定以及存储过程和函数的调用方法,帮助开发者实现Python与Oracle的高效数据交互。

本文详细介绍Python如何利用cx_Oracle模块与Oracle数据库进行交互,提供完整的操作指南供参考。

ORACLE_SID是操作系统层面的环境变量,用于指定默认连接的数据库实例。当服务器存在多个数据库实例时,必须正确设置此参数,否则无法通过“conn / as sysdba”方式连接默认实例。

简单来说,这类似于人的名字与外号的关系:父母称呼你的本名,而朋友可能使用你的外号。

在上述比喻中,Oracle实例对应“父母”,SID对应“本名”,而Service Name则对应“外号”。

SID主要用于区分服务器上的不同数据库实例,而Service Name则用于外部客户端的连接标识。两者可能不一致,开发者需明确区分并正确使用,否则可能导致远程连接失败。

前言

Python内置了大量文件处理模块,可读取并写入数据。然而,对于复杂的数据管理与分析,数据库更为专业。将Python的灵活性与数据库的管理能力结合,能显著提升数据处理效率。

由于工作中常使用Oracle数据库,Python提供了cx_Oracle模块用于连接Oracle。使用该模块前,需先完成下载与安装。

1. 下载cx_Oracle

Python的官方模块仓库PyPI(https://pypi.python.org/pypi)提供了丰富的第三方库。在PyPI中搜索“cx_Oracle”即可找到该模块,其官方下载地址为http://cx-oracle.sourceforge.net/。用户也可通过其他渠道获取安装包。

下载完成后,即可开始使用。

2. 使用流程

基本使用步骤如下:

①. 导入cx_Oracle模块 ②. 建立数据库连接 ③. 获取游标(cursor) ④. 利用游标执行数据库操作 ⑤. 关闭游标 ⑥. 关闭数据库连接

以下是一个基础示例:

cx_Oracle.connect("用户名 / 密码@ Oracle服务器IP / Oracle的SERVICE_NAME")

获取Oracle的SERVICE_NAME方法如下:

su - oracle #切换至oracle用户

env | grep ORACLE #查询ORACLE的环境变量

ORACLE_SID=benguo # benguo即为SERVICE_NAME

import cx_Oracle                     #引用模块cx_Oracle
conn=cx_Oracle.connect('load/123456@localhost/ora11g')  #连接数据库
c=conn.cursor()                      #获取cursor
x=c.execute('select sysdate from dual')          #使用cursor进行各种操作
x.fetchone()
c.close()                         #关闭cursor
conn.close()                       #关闭连接

示例代码如下:

#coding:utf-8
import cx_Oracle
def main():
  conn = cx_Oracle.connect("zebra/zebra@192.168.0.113/benguo")
  cur =conn.cursor()
  r= cur.execute("select * from userinfo")
  print
  print r.fetchone()
if __name__ == '__main__':
  main()

3. 几种用法

Python对数据库的操作主要包含数据写入与读取两方面。这两种操作既可通过SQL语句实现,也可通过调用存储过程完成。因此,cx_Oracle的主要用法包括:

①. 执行SQL语句

②. 调用存储过程和函数。

4. 执行SQL语句

执行SQL语句相对简单,参考上述示例即可。使用cursor.execute方法即可执行SQL,随后通过fetchone或fetchall方法读取执行结果。

以下示例展示了Insert语句及变量绑定的用法。

import cx_Oracle
conn=cx_Oracle.connect('load/123456@loaclhost/ora11g')
c=conn.cursor()
x=c.execute('insert into demo(v) values(:1)',['nice'])
conn.commit();
c.close()
conn.close()

变量绑定机制与Oracle动态SQL类似,使用冒号(:)作为占位符,例如代码中的:1。赋值方式是通过传入一个List,如代码中的['nice']。List中的元素数量必须与占位符数量严格一致,否则将引发错误。

执行完成后,可调用连接对象的方法connect.commit()来提交事务。

5. 调用存储过程和方法

具体代码示例如下:

--存储过程代码:
CREATE OR REPLACE PROCEDURE P_DEMO(V1 IN VARCHAR2, V2 OUT VARCHAR2) IS
BEGIN
  V2 := V1;
END;

#Python代码:
import cx_Oracle
conn=cx_Oracle.connect('load/123456@localhost/ora11g')
c=conn.cursor()
str1='nice'
str2='  '#需要有值,即len(str2)>=len(str1)
x=c.callproc('p_demo',[str1,str2])
print(str2)
c.close()
conn.close()

调用存储过程使用的是cursor.callproc方法。在上述示例中,若变量为OUT类型,在Python中赋值时,该变量的长度不能小于存储过程中定义的长度。

--函数代码:
CREATE OR REPLACE function F_DEMO(V1 VARCHAR2) RETURN VARCHAR2 IS
BEGIN
  RETURN V1;
END;

#Python代码:
import cx_Oracle
conn=cx_Oracle.connect('load/123456@localhost/ora11g')
c=conn.cursor()
str1='nice'
str2=c.callfunc('f_demo',cx_Oracle.STRING,[str1])
print(str2)
c.close()
conn.close()

调用函数使用的方法是cursor.callfunc。与存储过程不同,调用函数时需要明确指定传输参数的类型。

结束

通过cx_Oracle,Python得以与Oracle数据库进行双向沟通,实现优势互补。

例如,可将Python作为数据收集工具,从Web或文件中获取数据,并将其保存至Oracle数据库,进而利用Oracle进行深层数据分析。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表