使用Python的cx_Oracle连接数据库时一直报错怎么办?

运行环境:win7 64 位

在控制台使用 cx_oracle 连接数据时,当执行到 conn = cx_Oracle.connect('xx', 'xx', '192.168.1.111:1521/orcl')时, 就会报 “无法定位程序输入点.....kernel32.dll 上”。

使用 ide 连接数据时,相同的代码,一直报 “cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle”。

版本如下 python : 2.7 64 位 cx_oracle : cx_Oracle-5.3-11g.win-amd64-py2.7 oracle 客户端 : 11g 64 位


使用Python的cx_Oracle连接数据库时一直报错怎么办?

2 回复

遇到cx_Oracle报错,别慌,先按这个顺序排查,基本能解决90%的问题。

第一步:确认基础信息 先检查你的连接字符串、用户名、密码、主机地址、端口和服务名(或SID)是否正确。一个常见的坑是服务名和SID的区别,连接字符串通常是 主机:端口/服务名

第二步:检查客户端安装 cx_Oracle需要Oracle Instant Client。去Oracle官网下载对应你操作系统和Python位数的Basic包,解压后把路径加到系统环境变量PATH里。这是最关键的步骤。

第三步:验证版本匹配pip list看看你的cx_Oracle版本,最好和你的Oracle数据库版本大致匹配。同时,确保你的Python是64位还是32位,Instant Client必须和Python位数一致。

第四步:看具体的错误信息 把完整的报错信息贴出来。如果是DPI-1047,那基本就是Instant Client没找到;如果是认证错误,那就是密码或用户问题;如果是监听错误,检查主机端口和网络。

给你个最基础的测试代码:

import cx_Oracle

# 替换成你的实际信息
dsn = cx_Oracle.makedsn('host', 'port', service_name='service_name')
connection = cx_Oracle.connect(user='username', password='password', dsn=dsn)

cursor = connection.cursor()
cursor.execute('SELECT * FROM v$version')
for row in cursor:
    print(row)

cursor.close()
connection.close()

一句话总结:先装对Instant Client并设置PATH,再检查连接参数。


oracle 客户端和服务端的版本要对应

回到顶部