Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak mogę uzyskać dostęp do Oracle z Pythona?

Oto, co zadziałało dla mnie. Moje wersje Pythona i Oracle różnią się nieco od twojej, ale powinno obowiązywać to samo podejście. Upewnij się tylko, że wersja instalatora binarnego cx_Oracle jest zgodna z wersją klienta Oracle i Pythona.

Moje wersje:

  • Python 2.7
  • Oracle Instant Client 11G R2
  • cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
  • Windows XP SP3

Kroki:

  1. Pobierz pakiet Oracle Instant Client. Użyłem instantclient-basic-win32-11.2.0.1.0.zip. Rozpakuj go do C:\twoja\ścieżka\do\instantclient_11_2
  2. Pobierz i uruchom instalator binarny cx_Oracle. Użyłem cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Zainstalowałem go dla wszystkich użytkowników i wskazałem lokalizację Pythona 2.7, którą znalazł w rejestrze.
  3. Ustaw zmienne środowiskowe ORACLE_HOME i PATH za pomocą skryptu wsadowego lub innego mechanizmu, który ma sens w kontekście aplikacji, tak aby wskazywały katalog Oracle Instant Client. Zobacz źródło oracle_python.bat poniżej. Jestem pewien, że musi być na to bardziej eleganckie rozwiązanie, ale chciałem maksymalnie ograniczyć zmiany w całym systemie. Upewnij się, że docelowy katalog Oracle Instant Client jest umieszczony na początku ścieżki PATH (lub przynajmniej przed innymi katalogami klientów Oracle). W tej chwili robię tylko rzeczy z wiersza poleceń, więc po prostu uruchamiam oracle_python.bat w powłoce przed uruchomieniem jakichkolwiek programów, które wymagają cx_Oracle.
  4. Uruchom regedit i sprawdź, czy w \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE jest ustawiony klucz NLS_LANG. Jeśli tak, zmień nazwę klucza (zmieniłem go na NLS_LANG_OLD) lub usuń jego ustawienie. Ten klucz powinien być używany tylko jako domyślna wartość NLS_LANG dla klienta Oracle 7, więc można go bezpiecznie usunąć, chyba że używasz klienta Oracle 7 w innym miejscu. Jak zawsze, przed wprowadzeniem zmian upewnij się, że wykonałeś kopię zapasową rejestru.
  5. Teraz powinieneś być w stanie zaimportować cx_Oracle do swojego programu w Pythonie. Zobacz źródło oracle_test.py poniżej. Zauważ, że musiałem ustawić połączenie i ciągi SQL na Unicode dla mojej wersji cx_Oracle.

Źródło:oracle_python.bat

@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%

Źródło:oracle_test.py

import cx_Oracle

conn_str = u'user/[email protected]:port/service'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u'select your_col_1, your_col_2 from your_table')
for row in c:
    print row[0], "-", row[1]
conn.close()

Możliwe problemy:

  • „ORA-12705:Nie można uzyskać dostępu do plików danych NLS lub określono nieprawidłowe środowisko” – natknąłem się na to, zanim dokonałem zmiany w rejestrze NLS_LANG.
  • "TypeError:argument 1 musi być w formacie Unicode, a nie str" - jeśli musisz ustawić ciąg połączenia na Unicode.
  • "TypeError:oczekiwanie na brak lub ciąg" - jeśli chcesz ustawić ciąg SQL na Unicode.
  • "ImportError:ładowanie DLL nie powiodło się:nie można znaleźć określonej procedury." - może wskazywać, że cx_Oracle nie może znaleźć odpowiedniej biblioteki DLL klienta Oracle.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tylko kopia zapasowa schematu SQL?

  2. Importowanie plików w Oracle Apex za pomocą wwv_flow_files

  3. Jak korzystać z rownum

  4. ORA-20001 w R12 Zbierz statystyki schematu dotyczące 11g (FND_HISTOGRAM_COLS)

  5. Tworzenie wyzwalacza sekwencji Oracle