MAC配置完Oracle Client后用cx_Oracle连接数据库仍然报错

我按照这个教程配置的oracle client

https://blog.csdn.net/u014543416/article/details/127967101?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169220131916800184189416%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169220131916800184189416&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-11-127967101-null-null.142^v92^chatsearchT0_1&utm_term=Mac%E9%85%8D%E7%BD%AEoracle%20client&spm=1018.2226.3001.4187

但配置完后用cx_Oracle远程连接oracle数据库仍然报以下错误,错误提示instantclient_19_8里面无lib文件夹下的libclntsh.dylib,但官网下载的驱动里面就没有lib文件夹

img

以下是本机一些基本信息:

oracle驱动路径:/Users/jimyau/Library/OracleClient/instantclient_19_8

环境变量:
export ORACLE_HOME=/Users/jimyau/Library/OracleClient/instantclient_19_8

export PATH=$ORACLE_HOME:$PATH

mac系统版本:macos 13.5,m1芯片

python版本:anaconda内置的python3.11,安装的是x86_64版本,没有用arm版本的anaconda

请教下是哪一步出错了吗,按照教程配置python死活连不上oracle数据库

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

主要看这三点
正确安装了适用于您的操作系统版本的Oracle Client
确保您的系统环境变量中已经包含了Oracle Client的路径。

import cx_Oracle

# 连接信息
username = "your_username"
password = "your_password"
host = "your_host"
port = "your_port"
service_name = "your_service_name"

# 构建连接字符串
dsn = cx_Oracle.makedsn(host, port, service_name=service_name)

# 连接数据库
connection = cx_Oracle.connect(username, password, dsn)

# 在此之后可以执行查询等操作


问题点:DPI-1047 错误
思路分析:DPI-1047 错误是由于 Oracle Instant Client 环境变量未正确设置或配置引起的。
在使用 cx_Oracle 库连接到 Oracle 数据库时,需要正确设置以下环境变量:

ORACLE_HOME:指向 Oracle Instant Client 的安装路径。
LD_LIBRARY_PATH(对于 Linux/Unix 系统)或 PATH(对于 Windows 系统):包含 Oracle Instant Client 库文件的路径。

编辑bash_profile配置文件
bash_profile 文件是每个用户的个人配置文件,因此每个用户都可以在其自己的主目录下找到该文件。如果你希望对所有用户生效,可以编辑 /etc/bashrc 或 /etc/profile 文件。
注意:记得在修改配置文件之前备份原始文件,以防意外情况发生。此外,请确保你了解你所做的更改可能产生的影响,并小心操作。

# 编辑bash_profile配置文件
vi  ~/.bash_profile
 
# 添加下面内容,instantclient_19_8就是我们刚才所放文件的路径
export ORACLE_HOME=/Users/wangyu/Library/OracleClient/instantclient_19_8
export PATH=$ORACLE_HOME:$PATH
 
# 保存退出后再刷新下环境变量
source  ~/.bash_profile

参考gpt:
结合自己分析给你如下建议:
你的Python和Oracle Client的位数不一致,例如你的Python是64位的,而你的Oracle Client是32位的,或者反之。你需要确保它们的位数相同,否则会出现兼容性问题。
你的Oracle Client的路径没有正确设置,导致Python无法找到它。你需要将Oracle Client的路径添加到环境变量中,例如LD_LIBRARY_PATH(Linux)或者PATH(Windows)。
你的Oracle Client的版本不支持你的Oracle Database的版本,例如你的Oracle Client是11g的,而你的Oracle Database是12c或者更高的。你需要升级你的Oracle Client到一个合适的版本,或者使用Instant Client Basic Light,它可以支持更多版本的Oracle Database。
为了解决这个问题,你可以尝试以下几个步骤:
检查你的Python和Oracle Client的位数是否一致,如果不一致,你需要重新安装一个相同位数的版本。你可以使用python -c "import platform; print(platform.architecture())"命令来查看你的Python的位数,以及使用file命令来查看你的Oracle Client库文件(libclntsh.so)的位数。
检查你是否已经将Oracle Client的路径添加到环境变量中,如果没有,你需要将它添加到LD_LIBRARY_PATH(Linux)或者PATH(Windows)中,并重新启动Python。例如,在Linux上,你可以使用export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_8:$LD_LIBRARY_PATH命令来设置环境变量,其中/opt/oracle/instantclient_19_8是你解压缩Instant Client包的路径。
检查你是否使用了cx_Oracle.init_oracle_client(lib_dir=…)函数来指定Oracle Client库文件的路径,如果没有,你可以在导入cx_Oracle模块之后调用这个函数,并传入正确的路径作为参数。例如,在Linux上,你可以使用cx_Oracle.init_oracle_client(lib_dir="/opt/oracle/instantclient_19_8")命令来指定路径。
检查你是否使用了正确的连接字符串来连接数据库,如果不正确,你需要修改它。一般来说,连接字符串有以下几种格式:
Easy Connect: cx_Oracle.connect("user/password@host:port/service_name")
TNS: cx_Oracle.connect("user/password@tns_name")
DSN: cx_Oracle.connect("user", "password", "dsn_name")
Connection Object: cx_Oracle.connect(connection)
其中,host是数据库服务器的主机名或者IP地址,port是数据库服务器监听端口,默认是1521,service_name是数据库服务名或者SID,tns_name是TNSNAMES.ORA文件中定义的名称,dsn_name是cx_Oracle.makedsn()函数返回的值,connection是cx_Oracle.Connection类型的对象。

python的库版本对一下