Connessione a Oracle DB con Python

Oct 21 2020

Sto provando a connettermi al mio database Oracle con Python. Attualmente sto usando cx_Oracle per connettermi con esso ma non funziona ...

#!/usr/bin/python3
import cx_Oracle

dsn_tns = cx_Oracle.makedsn('Host Name', 'Port Number', service_name='Service Name')

conn = cx_Oracle.connect(user=r'user', password='password', dsn=dsn_tns)

c = conn.cursor()
c.execute('select * from person')

conn.close()

Errore:

conn = cx_Oracle.connect(user=r'g_user', password='G_user', dsn=dsn_tns)
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://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

Sono andato sul sito e non ho trovato nulla che potesse aiutare ...

Qualcosa nel mio codice è sbagliato o è qualcos'altro?

Risposte

1 ChristopherJones Oct 22 2020 at 05:52

Il tuo errore è

DPI-1047: Impossibile individuare una libreria client Oracle a 64 bit: "libclntsh.so: impossibile aprire il file oggetto condiviso: nessun file o directory di questo tipo".

Prima di avviare il processo Python, sono necessari i file binari del client Oracle Linux a 64 bit nel percorso di ricerca del sistema operativo .

Il modo più semplice è installare Oracle Instant Client gratuito . Utilizza l'ultima versione 19c: ti consentirà di connetterti a Oracle DB 11.2 o versioni successive. Le istruzioni per l'installazione sono in fondo alla pagina di download. Se installi gli RPM, tutto è configurato per te. Se installi lo ZIPS preferisco impostare il percorso di ricerca della libreria con il ldconfigquale viene mostrato anche nelle istruzioni.

1 AlonBarad Oct 21 2020 at 20:36

Assicurati di aver installato il client Oracle corretto (puoi trovare il pacchetto client Oracle da qui "https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html" e aggiungere la cartella scaricata all'interno della cartella in cui è installato python e quindi aggiungi questa posizione (posizione della cartella del pacchetto client) alla variabile di ambiente del sistema.Spero che funzioni.

Ti consiglio di verificare prima la compatibilità del tuo sistema operativo, Python e l'architettura Oracle Instant Client:

import platform
platform.architecture()

Quindi, ti consiglio vivamente di impostare Oracle Instant Client all'interno del tuo notebook jupyter:

import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]

Fonte: errore cx_Oracle. DPI-1047: Impossibile individuare una libreria client Oracle a 64 bit