Python连接Oracle数据库:cx_Oracle与oracledb库的比较与选择 ...

打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

一、概述

Python 访问 Oracle可以通过两种Oracle官方库:
旧驱动:cx_Oracle(需要安装Oracle Instant client)
新驱动:oracledb(Oracle数据库12.1或更高版本不需要安装 Oracle Instant client)
cx_Oracle

需要安装 Oracle Instant client(Oracle即时客户端)。
oracledb

GitHub:https://github.com/oracle/python-oracledb
python-oracledb 有两种模式: Thin 和 Thick。


  • 默认模式是Thin,该模式直接连接到 Oracle数据库,不需要Oracle客户端库。
  • Thin模式只支持Oracle数据库12.1或更高版本。
  • Thick模式需要Oracle客户端库。
二、安装Oracle Instant client

官方下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
官方安装手册:https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#installing-cx-oracle-on-macos-intel-x86
停止现在(20240611), 最新版本instantclient-basic-macos.x64-19.16.0.0.0dbru.dmg 客户端经测试可以访问Oracle 11.2.0.2.0。
以下是在macos上安装 instantclient-basic-macos.x64-19.16.0.0.0dbru.dmg 步调:
  1. cd $HOME/Downloads
  2. # 1.下载 instantclient-basic-macos.x64-19.16.0.0.0dbru.dmg
  3. # 2.挂载下载的DMG文件
  4. 双击 instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg
  5. # 3.默认安装在$HOME/Downloads(如果不介意,则完成后直接跳到第 5 步)
  6. 复制全部文件到自定义文件夹
  7. # 4.修改安装文件
  8. vim install_ic.sh
  9. DEST=/Users/${USER}/Downloads/instantclient_19_16
  10. 修改为自己创建的目录:
  11. DEST=/Users/wangfugui/home/dev/middleware/数据库/Oracle/instantclient/instantclient_19_16
  12. # 5.安装客户端
  13. sh install_ic.sh
复制代码
(非必须)如果要安装sdk、sqlplus,按照上面的方法,将文件复制到同一个目录中 instantclient_19_16,修改目录并执行安装。
三、Python测试

cx_Oracle:

需要安装 Oracle Instant client。
  1. import cx_Oracle
  2. cx_Oracle.init_oracle_client(lib_dir="/Users/wangfugui/home/dev/middleware/数据库/Oracle/instantclient/instantclient_19_16")
  3. connection = cx_Oracle.connect(user="oracle", password="oracle",
  4.                                dsn="localhost/XE")
  5. cursor = connection.cursor()
  6. cursor.execute("""
  7.         SELECT first_name, last_name
  8.         FROM employees
  9.         WHERE EMPLOYEE_ID > :did AND EMPLOYEE_ID < :eid""",
  10.         did = 101,
  11.         eid = 104)
  12. for fname, lname in cursor:
  13.     print("Values:", fname, lname)
复制代码
oracledb:

Oracle数据库12.1或更高版本不需要安装 Oracle Instant client。
  1. import getpass
  2. import oracledb
  3. un = 'oracle'
  4. cs = 'localhost/XE'
  5. pw = getpass.getpass(f'Enter password for {un}@{cs}: ')
  6. with oracledb.connect(user=un, password=pw, dsn=cs) as connection:
  7.     with connection.cursor() as cursor:
  8.         sql = """SELECT * FROM employees"""
  9.         for r in cursor.execute(sql):
  10.             print(r)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表