Połączenie z Oracle DB z Pythonem
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
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.
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