在Jupyter中使用cx_Oracle连接到本地oracle数据库时出错

时间:2019-08-10 22:55:33

标签: python oracle jupyter cx-oracle

我想使用cx_Oracle连接到本地数据库,但是会引发错误:

DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help

我可以使用sqlplus和SQL Developer连接到数据库,但不适用于Jupyter中的Python cx_Oracle。

import cx_Oracle

host = 'localhost'
port = 1521
SID = 'xe'
dsn_tns = cx_Oracle.makedsn(host, port, SID)

connection = cx_Oracle.connect('user', 'passwd', dsn_tns)

我是否有可能一团糟。环境变量或客户端安装?

echo ${ORACLE_HOME};
/u01/app/oracle/product/11.2.0/xe

echo ${LD_LIBRARY_PATH};
/usr/lib/oracle/12.2/client64/lib

我在/usr/lib/oracle/12.2/client64/lib中安装了客户端

1 个答案:

答案 0 :(得分:0)

  • 您也可以更新cx_Oracle。 DPI-1047消息使用的是在最新版本中更新的文本。这实际上并不能解决您的问题

  • 保持清洁。如果使用的是Oracle Instant Client,请不要设置ORACLE_HOME。

  • 我怀疑您的环境变量没有传播到cx_Oracle。

  • 对于64位XE,您不需要安装Instant Client(因为您的cx_Oracle消息告诉我它是64位,因为错误正在寻找64位Oracle客户端) 。 cx_Oracle可以使用数据库库。

  • 一旦解决了库搜索路径问题,连接字符串就会出现问题。您正在尝试使用旧的SID构造,但应使用Service Name。它需要设置为:

    sn = 'xe'
    dsn_tns = cx_Oracle.makedsn(host, port, service_name=sn)