简体   繁体   中英

Error connecting to local oracle database with cx_Oracle in Jupyter

I want to connect to local database with cx_Oracle but it throws an error:

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

I can connect to database with sqlplus and SQL Developer, but it doesnt work with Python cx_Oracle in Jupyter.

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)

Is it possible I messed sth. with environment variables or client installation?

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

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

I installed client in /usr/lib/oracle/12.2/client64/lib

  • You may as well update cx_Oracle. The DPI-1047 message is using text that was updated in recent versions. This won't actually solve your problem

  • Keep it clean. Don't set ORACLE_HOME if you are using Oracle Instant Client.

  • I suspect your environment variables aren't being propagated down to cx_Oracle.

  • With a 64-bit XE, you shouldn't need to install Instant Client in your case (because your cx_Oracle message tells me it is 64-bit because the error is looking for a 64-bit Oracle client). cx_Oracle can use the DB libraries.

  • Once you sort out your library search path issue, you will then hit a problem with your connection string. You are trying to use an old SID construct, but should use a Service Name . It needs to be set like:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM