cx_Oracle 提示DPI-1047

文章讲述了在遇到Cannotlocatea64-bitOracleClientlibrary错误时,如何检查Python和cx_Oracle库的版本,下载正确的Oracle客户端,并最终通过设置Windows环境变量或Linux的.bash_profile中的路径来解决问题。

解决 Cannot locate a 64-bit Oracle Client library 问题

兄弟们呀 吐血完了 查了一下午 终于搞定了 我想说一下我都查了哪些东西

  1. 查python 版本

import platform

platform.architecture()

查了是64位

  1. 查了cx_oracle 的版本是不是64位的 (要是不确定那就直接pypi上面重新下)和对应需要的oracle client

在cx_oracle 文档 cx_oracle 8 installation 这一章节有cx_oracle和client 的对应版本说明

当然如果是cx_oracle 版本不对 在链接数据库的时候会提示

我的cx_oracle 是8.3 的 也重新安装了 这个cx_oracle

还是不行

  1. oracle client 我也重新导官网下载了 64位的

到这里 我蒙了 版本全能对的上 为什么还提示这个报错呢

一开始我代码在windows上 例如以下 是在代码中指定了

cx_Oracle.init_oracle_client(lib_dir=r"D:\soft\instantclient_21_7")

所以并没有在.bash_profile 中设置环境变量

最后解决:(因为我突然想到我在windows上的时候设置了这个环境变量 然后决定试下)

就是将client 路径加载到 .bash_profile 的 PATH LD_LIBRARY_PATH ORACLE_HOME 变量中就好了

吐血 吐血 吐血 如果大家上面都检查完了 那就是这个问题了 !!!

兄弟们 中间这些包怎么下 就不用我写了吧 只是提供一个思路。

### 问题分析 出现 `cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library` 错误的根本原因在于 Python 的 `cx_Oracle` 模块无法找到可用的 Oracle 客户端库。该错误通常与以下因素有关: - **Oracle Instant Client 的安装与配置**:`cx_Oracle` 依赖 Oracle 提供的客户端库(如 `oci.dll`)来与数据库通信。如果没有正确安装或配置 Oracle Instant Client,则会导致该错误。 - **PythonOracle 客户端位数匹配**:用户使用的是 `cx_Oracle-8.3.0-cp38-cp38-win_amd64.whl`,这是一个 64 位版本的 `cx_Oracle` 包,因此必须搭配 64 位版本的 Oracle Instant Client[^1]。 - **环境变量配置**:如果 `cx_Oracle` 无法在系统路径中找到 Oracle 客户端库(例如 `oci.dll`),则会触发 DPI-1047 错误。 ### 解决方案 #### 1. 下载并安装 64 位 Oracle Instant Client 用户应从 Oracle 官方网站下载适用于 Windows 的 64 位 Oracle Instant Client Basic Package,确保其版本与目标数据库兼容(例如 19c 或 21c)[^3]。下载地址为: ``` https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html ``` 下载后解压到本地目录,例如 `C:\oracle\instantclient_21_10`。 #### 2. 配置环境变量 将解压后的 Oracle Instant Client 目录添加到系统的 `PATH` 环境变量中。例如,将 `C:\oracle\instantclient_21_10` 添加至 `PATH`,确保 `cx_Oracle` 可以找到 `oci.dll` 和其他必要的库文件[^3]。 #### 3. 验证安装 运行以下 Python 代码以验证是否成功加载 Oracle 客户端库: ```python import cx_Oracle print(cx_Oracle.clientversion()) ``` 如果输出 Oracle 客户端版本号,则说明配置成功;否则仍需检查路径或库版本。 #### 4. 使用 `cx_Oracle.init_oracle_client()` 手动指定路径(可选) 对于某些环境,可能需要显式调用 `init_oracle_client()` 来指定 Oracle Instant Client 的路径: ```python import cx_Oracle import os cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_21_10") ``` 该方法可避免依赖系统环境变量,适用于多版本共存或路径冲突的情况[^3]。 #### 5. 确保 Pythoncx_Oracle 架构一致 用户使用的是 `cx_Oracle-8.3.0-cp38-cp38-win_amd64.whl`,这表明其 Python 环境应为 64 位版本。可通过以下命令确认 Python 架构: ```bash python -c "import platform; print(platform.architecture())" ``` 输出应为 `('64bit', 'WindowsPE')`,否则需更换为 64 位 Python 解释器[^1]。 ### 示例代码 以下是一个完整的连接 Oracle 数据库的示例: ```python import cx_Oracle # 初始化 Oracle 客户端(可选) cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_21_10") # 建立数据库连接 connection = cx_Oracle.connect( user='your_username', password='your_password', dsn='your_dsn' ) # 查询数据库版本 cursor = connection.cursor() cursor.execute("SELECT * FROM dual") result = cursor.fetchone() print(result) # 关闭连接 cursor.close() connection.close() ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值