cx_Oracle和oracledb的爱恨情仇

在这里插入图片描述

前言

实习生:我要用python访问oracle,我究竟该用哪个库啊,网上搜的有两个,一个是cx_Oracle另一个是oracledb,这两个有什么区别?
我:话说那是2022年5月一个阴云密布的日子,甲骨文发布了python oracledb驱动程序。与早期的cx_Oracle驱动程序(创建于1999年)一样,该模块允许Python应用程序连接到Oracle数据库,执行SQL和PL/SQL语句,并执行SODA操作。这两个驱动程序都实现了Python数据库API规范2.0版,有很多扩展,只有一些必要的遗漏。该规范的支持允许在流行的Python框架、ORM和SQL生成器包中使用这两个驱动程序。这两个驱动程序都可以从PyPi、conda-forge和各种Linux存储库中安装。它们都由Oracle维护。
实习生:别扯淡了行吗?你就告诉我有什么区别

区别

Python oracledb只是cx_Oracle的最新主要版本,恰好有了一个新名称。可以将其视为cx_Oracle 9,cx_Oracle8.3的继承者。

除了具有新功能外,作为一个主要版本,还有一些变化需要注意:
cx_Oracle中长期不推荐使用的一些功能在python oracledb中不可用;连接函数需要命名关键字参数;如果要继续使用Oracle客户端库(即使用“thick模式”),则必须调用init_oracle_client()方法。

这两个库今后会怎么发展

看看官方的说明:

正如我们在以前的cx_Oracle命名空间下所做的那样,我们将继续增强和维护python oracledb。自2022的1.0.0发布以来,我们已经发布了三个功能版本和各种其他错误修复版本。

还没有看到任何对cx_Oracle 8.3驱动程序进行bug修复的需求。它有着悠久的历史,并且建立在广泛使用的Oracle客户端库之上,非常稳定。cx_Oracle用户一直积极升级,不希望发布小补丁。例如,在cx_Oracle8.0发布后,我们从未被要求为其前身cx_Oracle 7.3创建错误修复补丁版本。这并不是说我们将来不会为cx_Oracle 8.3做这样的事情,但似乎不太可能需要它。python oracledb的采用率非常高。当python oracledb发布时,我们假设几年后(即大约2024年5月),我们将不再考虑发布任何cx_Oracle bug修复版本,具体取决于您的反馈。这仍然是我们的计划。

代码示例

import oracledb
# Connect to the database
# 记得此处要下载instantclient,具体版本需要对应oracle的版本
oracledb.init_oracle_client(lib_dir=r"D:\\data\\oracle\\instantclient_11_2")
conn = oracledb.connect(
    host="10.9.44.xx",
    port=1521,
    user="user",
    password="123456",
    service_name="dbname",
    encoding="utf8"
)
# Create a cursor
cursor = conn.cursor()

# Execute a SELECT statement
cursor.execute('SELECT * FROM tb')

# Fetch the results
results = cursor.fetchall()

# Loop through the results
for row in results:
    print(row)

instantclient

Instant Client是Oracle公司提供的一个轻量级客户端软件包,用于将应用程序连接到远程Oracle数据库。它由一系列的动态链接库(DLL文件)组成,可以在应用程序中动态加载并与Oracle数据库进行通信。

  • Instant Client的设计目标是提供一个简单、可移植和快速部署的解决方案,使开发人员能够以最小的依赖关系连接和访问Oracle数据库。

  • 使用Instant Client可以将Oracle数据库相关的功能打包到应用程序中,而无需安装完整的Oracle客户端。这对于那些不需要所有客户端功能、或者需要在部署环境中保持较小的软件包大小的情况下非常有用。

  • Instant Client提供了与Oracle数据库通信所需的基本功能和库,包括连接管理、SQL执行、数据类型支持和安全功能等。它还支持多种操作系统、多个编程语言和多个版本的Oracle数据库。开发人员可以选择适合自己开发环境和应用程序需求的Instant Client版本。

总结来说,Instant Client是一个独立、轻量级的Oracle数据库客户端软件包,可以帮助开发人员在应用程序中快速、简便地连接和与Oracle数据库进行通信。它提供了基本的数据库功能,并支持多种操作系统和编程语言。

注意:

如果不配置instantclient会报错:

cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

python连接oracle常用库

  • cx_Oracle
    是Python与Oracle数据库通信的最常用的库之一。它提供了与Oracle数据库进行连接、查询、事务处理等操作的功能。它是使用C编写的,因此在性能和稳定性方面表现出色。
  • pyodbc
    是一个通用的Python数据库接口库,可以用于连接多种类型的数据库,包括Oracle。它使用ODBC(开放数据库连接)作为中间层,允许与各种不同的数据库进行通信。
  • sqlalchemy
    是Python中一个非常强大的数据库工具库,它提供了一套统一的API,用于与多种数据库进行交互,包括Oracle数据库。它可以帮助简化数据库连接和查询操作,并提供ORM(对象关系映射)功能。
  • pyoracle
    是一个基于cx_Oracle的Python库,提供了一些额外的功能和抽象,使连接和操作Oracle数据库更容易。

后记

我鼓励你测试并计划升级到python oracledb,这就是未来的趋势。你可以利用新的(和即将推出的)功能,并从新的(可选的)精简模式的性能优势中获益。当然,如果你愿意,你可以继续使用Oracle Instant Client的“Thick模式”。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值