64位Python调用32位Oracle客户端报错 cx_Oracle.DatabaseError: DPI-1047
问题
操作系统64为,Python64位,Oracle客户端32位。因为其他原因,不能将Oracle客户端改成64位,所以导致cx_Oracle64位无法使用,cx_Oracle32位无法安装。
原因
Windows环境下,如果安装的是64位Python,在使用cx_Oracle时,默认调用的是64位Oracle客户端,这时我们也只能安装cx_Oracle的-win_amd64位版。
解决方法:
1.先去安装与当前Python版本相匹配的cx_Oracle,我的是Python3.8。安装的版本为:cx_Oracle-8.3.0-cp38-cp38-win_amd64.whl
2.下载相关的Oracle instantclient(即时客户端),并解压到方便调用的文件夹
下载地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
我下载的版本为:instantclient-basiclite-windows.x64-19.13.0.0.0dbru.zip,可以多试几次,总有一款适合你
3.解压instantclient,在python代码中,更改环境变量,以调整Oracle驱动位置。
我这边解压后的地址为:
E:\software\Python\instantclient-basiclite-windows.x64-19.13.0.0.0dbru
代码调整方式为
import os
os.environ['path'] = r'E:\software\Python\instantclient-basiclite-windows.x64-19.13.0.0.0dbru\instantclient_19_13'
import cx_Oracle
现在cx_Oracle就可以正常调用了