Her er hvad der virkede for mig. Mine Python- og Oracle-versioner er lidt forskellige fra din, men den samme tilgang bør gælde. Bare sørg for, at cx_Oracles binære installationsversion matcher din Oracle-klient- og Python-versioner.
Mine versioner:
- Python 2.7
- Oracle Instant Client 11G R2
- cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
- Windows XP SP3
Trin:
- Download Oracle Instant Client-pakken. Jeg brugte instantclient-basic-win32-11.2.0.1.0.zip. Pak den ud til C:\din\sti\to\instantclient_11_2
- Download og kør det binære installationsprogram cx_Oracle. Jeg brugte cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Jeg installerede det for alle brugere og pegede på det Python 2.7-sted, det fandt i registreringsdatabasen.
- Indstil miljøvariablerne ORACLE_HOME og PATH via et batchscript eller en hvilken som helst mekanisme, der giver mening i din appkontekst, så de peger på Oracle Instant Client-biblioteket. Se kilden til oracle_python.bat nedenfor. Jeg er sikker på, at der skal være en mere elegant løsning til dette, men jeg ønskede at begrænse mine systemomfattende ændringer så meget som muligt. Sørg for, at du placerer det målrettede Oracle Instant Client-bibliotek i begyndelsen af PATH (eller i det mindste foran alle andre Oracle-klientmapper). Lige nu laver jeg kun kommandolinje-ting, så jeg kører bare oracle_python.bat i skallen, før jeg kører programmer, der kræver cx_Oracle.
- Kør regedit og kontroller, om der er en NLS_LANG-nøgle indstillet til \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Hvis det er tilfældet, omdøb nøglen (jeg ændrede den til NLS_LANG_OLD) eller deaktiver den. Denne nøgle bør kun bruges som standard NLS_LANG-værdien for Oracle 7-klienten, så det er sikkert at fjerne den, medmindre du tilfældigvis bruger Oracle 7-klienten et andet sted. Som altid skal du sørge for at sikkerhedskopiere dit register, før du foretager ændringer.
- Nu skulle du være i stand til at importere cx_Oracle i dit Python-program. Se kilden til oracle_test.py nedenfor. Bemærk, at jeg var nødt til at indstille forbindelsen og SQL-strengene til Unicode for min version af cx_Oracle.
Kilde:oracle_python.bat
@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%
Kilde: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()
Mulige problemer:
- "ORA-12705:Kan ikke få adgang til NLS-datafiler eller ugyldigt miljø angivet" - Jeg stødte på dette, før jeg foretog NLS_LANG-registreringsændringen.
- "TypeError:argument 1 skal være unicode, ikke str" - hvis du skal indstille forbindelsesstrengen til Unicode.
- "TypeError:forventer ingen eller en streng" - hvis du skal indstille SQL-strengen til Unicode.
- "ImportError:DLL-indlæsning mislykkedes:Den angivne procedure kunne ikke findes." - kan indikere, at cx_Oracle ikke kan finde den relevante Oracle-klient-DLL.