使用oracledb连接Oracle 10数据库时遇DPI-1047错误求助
解决oracledb连接Oracle 10g时的DPI-1047错误
核心问题分析
DPI-1047错误本质是oracledb模块找不到匹配的Oracle客户端核心库,大多由位数不匹配、路径错误、文件缺失三类原因导致。
分步排查与解决
严格匹配Python与客户端位数
必须保证Python和Oracle客户端同为64位或32位,混装直接导致加载失败。比如用64位Python,就只测试64位客户端,放弃32位版本。修正lib_dir路径配置
- 路径必须指向Oracle Instant Client的根目录(比如解压后的
instantclient_12_1文件夹),建议用绝对路径避免相对路径的坑,示例:lib_dir=r"C:\oracle\instantclient_12_1"(r前缀避免转义问题)。 - 路径里不能有中文、空格或特殊字符,比如
C:\Program Files\Oracle Client这类带空格的路径容易出问题,尽量放在纯英文无空格的目录下。
- 路径必须指向Oracle Instant Client的根目录(比如解压后的
检查客户端文件完整性
确认Instant Client文件夹里包含oci.dll、oraociei12.dll、oraons.dll这些核心文件,若缺失,重新从Oracle官网下载对应版本的Instant Client并解压。配置系统PATH环境变量
将Instant Client的根目录添加到系统PATH环境变量最前端,之后重启Python运行环境(IDE、命令行窗口都要重启),可以尝试去掉代码里的lib_dir参数,直接调用oracledb.init_oracle_client()让系统自动查找。适配Oracle 10g的客户端版本
Oracle 10g数据库推荐用11.2版本的Instant Client连接,下载对应位数的11.2版本,重复上述路径配置步骤测试。
调整后的代码示例
import oracledb # 替换为你的Instant Client绝对路径 oracledb.init_oracle_client(lib_dir=r"C:\oracle\instantclient_11_2") with oracledb.connect(user="etusae1", password="***", host="162.38.222.149", port=1521, sid="iut") as connection: with connection.cursor() as cursor: sql = """select sysdate from dual""" for r in cursor.execute(sql): print(r)
内容的提问来源于stack exchange,提问作者Kyucraft
相关产品推荐
相关产品推荐

