Połączenie z Oracle DB z Pythonem

Oct 21 2020

Próbuję połączyć się z moją bazą danych Oracle za pomocą języka Python. Obecnie używam cx_Oracle do łączenia się z nim, ale nie działa ...

#!/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()

Błąd:

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

Poszedłem na stronę i nie znalazłem nic, co mogłoby pomóc ...

Czy coś w moim kodzie jest nie tak, czy jest to coś innego?

Odpowiedzi

1 ChristopherJones Oct 22 2020 at 05:52

Twój błąd to

DPI-1047: Nie można zlokalizować 64-bitowej biblioteki klienta Oracle: „libclntsh.so: nie można otworzyć pliku obiektu współdzielonego: nie ma takiego pliku lub katalogu”.

Potrzebujesz 64-bitowych plików binarnych klienta Oracle Linux w ścieżce wyszukiwania systemu operacyjnego przed rozpoczęciem procesu Python.

Najłatwiej jest zainstalować darmowego klienta Oracle Instant Client . Użyj najnowszej wersji 19c - pozwoli ci połączyć się z Oracle DB 11.2 lub nowszą. Instrukcje instalacji znajdują się u dołu strony pobierania. Jeśli zainstalujesz RPM, wszystko jest skonfigurowane dla Ciebie. Jeśli instalujesz ZIPS, wolę ustawić ścieżkę wyszukiwania biblioteki, ldconfigktóra jest również pokazana w instrukcjach.

1 AlonBarad Oct 21 2020 at 20:36

Upewnij się, że zainstalowałeś poprawnego klienta oracle (pakiet klienta oracle można znaleźć tutaj „https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html” i dodaj pobrany folder w folderze, w którym jest zainstalowany Python, a następnie dodaj tę lokalizację (lokalizację folderu pakietu klienta) do zmiennej środowiskowej systemu. Mam nadzieję, że to zadziała.

Proponuję najpierw sprawdzić zgodność swojego systemu operacyjnego, architektury Python i Oracle Instant Client:

import platform
platform.architecture()

W takim razie zdecydowanie radzę ustawić klienta Oracle Instant Client w swoim notebooku jupyter:

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

Źródło: błąd cx_Oracle. DPI-1047: Nie można zlokalizować 64-bitowej biblioteki klienta Oracle