报错信息内容

Traceback (most recent call last): File “python/init.py”, line 282, in getAndExecuteInput
File “”, line 1, in cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "
libclntsh.so : cannot open shared object file: No such file or directory ". See https://oracle.github.io/odpi/doc/installation.html#linux for help

以上是报错信息内容,拆开报错,如上加黑内容所示,报错的原因是DPI-1047,也就是Oracle Client library出现了错误。

为啥会出现这个错误呢?后面的答案是:libclntsh.so这个文件没有找到,不能打开共享的路径文件,因此出现了错误,简单说共享文件计算机没有找到,就是环境变量配置是不正确的。那下面就是解决这个问题。

(1)检查环境变量是否存在

为了确定你配置的环境变量是否正确,请直接使用以下命令查看环境变量中是否存在ORACLE_HOME的环境变量,有了环境变量在系统的任何位置运行命令才能启动数据库,打开数据库的数据。

[root@tandelin ~]# env

这里我的ORACLE_HOME=/usr/lib/oracle/11.2/client64这个路径是存在的,在这之前已经配置好了。如果后面配置成功,就应该出现这个路径。

**如果该路径存在,就不需要配置环境变量**

在这里插入图片描述
(2)配置环境变量

将环境变量设置LD_LIBRARY_PATH为Instant Client版本的相应目录。例如:

export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH。

在这里插入图片描述
具体配置如下,在vim /etc/profile编辑器下的fi后添加如下内容:

[root@tandelin ~]# vim /etc/profile

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
export ORABIN=/usr/lib/oracle/11.2/client64/bin
PATH= PATH:HOME/bin:$ORACLE_HOME/bin

最后,运行配置的环境变量,让配置好的环境变量生效。

[root@test ~]# source  /etc/profile

环境变量配置参考如下https://blog.csdn.net/tandelin/article/details/98940498

(3)环境变量配置好后,就再次尝试连接oracle数据库
先用pip list 或者pip3 list查看数据包cx_Oracle是否存在,有时候cx_Oracle包是5.2.1的版本,有时候是7.2的版本,建议最新版本尝试下。

测试Python和Oracle数据库连接

import cx_Oracle
import pandas as pd
#获取数据库连接
username="****"
userpwd="****"
host="****"
port=1521
dbname="****"
dsn=cx_Oracle.makedsn(host, port, dbname)
connection=cx_Oracle.connect(username, userpwd, dsn)
sql="select * from ****  where rownum<5"
data = pd.read_sql(sql,connection)  ##直接将读取的sql数据转换成数据框,有助于下一步的可视化和统计建模
data.head(n=2)

注意:如果你的数据库中的数据表的名称是中文的,可能会出现乱码,或者报错,建议修改linux系统的字符编码。

其它错误libclntsh.so

如果出现这个错误,请进行软连接挂载文件,让系统的路径能正确的获取到该文件,操作如下:

[root@test ~]# sudo sh -c "/usr/lib/oracle/instantclient_11_1 > /etc/ld.so.conf.d/oracle-instantclient.conf"

sudo ldconfig

最近一直在用python写点监控oracle的程序,一直没有用到异常处理这一块,然后日常监控中一些误笼统的抛出数据库连接异常,导致后续处理的时候无法及时定位问题。 于是早上抽点时间看了下python3关于cx_oracle的异常处理形式。 其实,我只是想在python抛出oracle误的时候,捕获到具体ora-信息。 写法很简单,这里记录下,以备后用。 oracle_check(dbname) except cx_Oracle.DatabaseError as msg: print(msg) 另外,在python3中,except后面若是多项,需要添加(),这个是与py
Oracle客户端安装完成后,使用pythoncx_oracle连接数据库时,dpi:1047…,网上有各种各样的解答方法,诸如版本不对应等等,都无故痛痒,在尝试了多次后,确认如下步骤可以解决: mkdir/etc/ld.so.conf.d/oracle-instantclient.conf sh -c "echo /usr/lib/oracle/12.2/client64/lib...
python使用cx_oracle连接数据库时 DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help. 问题的原因是找不到动态链接文件,一般.s
下载编译好的含有bz2的so文件 将_bz2.cpython-37m-x86_64-linux-gnu.so放到对应的python3.7文件夹里…/python3.7/lib-dynload/下 python3 import bz2
DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory" 解决方案
python 打包exe xc_oracle 1047 error,Error: DPI-1047: Cannot locate a 64-bit Oracle Client library
这个误通常是由于您的系统中缺少 64 位 Oracle 客户端库引起的。要解决此问题,您可以尝试以下方法: 1. 确保您已正确设置 Oracle 客户端环境变量,例如 `ORACLE_HOME` 和 `LD_LIBRARY_PATH`(Linux 系统)或 `PATH`(Windows 系统)。 2. 下载并安装 64 位 Oracle 客户端库,确保它与您的 Python 安装和您的应用程序打包工具(如 pyinstaller)兼容。 3. 如果您使用的是 Conda 环境,请确保您已正确安装 `cx_oracle` 包,并且 Conda 环境中已正确配置了 Oracle 客户端环境变量。 4. 如果您的应用程序是使用 PyCharm 开发的,则可以尝试在 PyCharm 中设置 Oracle 客户端环境变量。在 PyCharm 中选择 "Run" > "Edit Configurations",然后在 "Environment variables" 中添加所需的环境变量。 如果您已经尝试了以上方法仍然无法解决问题,请提供更多详细信息,例如您的操作系统、Python 版本和您使用的打包工具,以便我们可以更好地帮助您解决问题。