Inilah yang berhasil untuk saya. Versi Python dan Oracle saya sedikit berbeda dari versi Anda, tetapi pendekatan yang sama harus diterapkan. Pastikan versi penginstal biner cx_Oracle cocok dengan klien Oracle dan versi Python Anda.
Versi saya:
- Python 2.7
- Klien Instan Oracle 11G R2
- cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
- Windows XP SP3
Langkah-langkah:
- Unduh paket Oracle Instant Client. Saya menggunakan instantclient-basic-win32-11.2.0.1.0.zip. Buka zip ke C:\your\path\to\instantclient_11_2
- Unduh dan jalankan penginstal biner cx_Oracle. Saya menggunakan cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Saya menginstalnya untuk semua pengguna dan mengarahkannya ke lokasi Python 2.7 yang ditemukan di registri.
- Setel variabel lingkungan ORACLE_HOME dan PATH melalui skrip batch atau mekanisme apa pun yang masuk akal dalam konteks aplikasi Anda, sehingga keduanya mengarah ke direktori Oracle Instant Client. Lihat sumber oracle_python.bat di bawah ini. Saya yakin pasti ada solusi yang lebih elegan untuk ini, tetapi saya ingin membatasi perubahan di seluruh sistem saya sebanyak mungkin. Pastikan Anda meletakkan direktori Oracle Instant Client yang ditargetkan di awal PATH (atau setidaknya di depan direktori klien Oracle lainnya). Saat ini, saya hanya melakukan hal-hal baris perintah, jadi saya hanya menjalankan oracle_python.bat di shell sebelum menjalankan program apa pun yang memerlukan cx_Oracle.
- Jalankan regedit dan periksa apakah ada kunci NLS_LANG yang disetel di \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Jika demikian, ganti nama kunci (saya mengubahnya menjadi NLS_LANG_OLD) atau hapus setel. Kunci ini hanya boleh digunakan sebagai nilai NLS_LANG default untuk klien Oracle 7, jadi aman untuk menghapusnya kecuali Anda menggunakan klien Oracle 7 di tempat lain. Seperti biasa, pastikan untuk membuat cadangan registri Anda sebelum melakukan perubahan.
- Sekarang, Anda seharusnya dapat mengimpor cx_Oracle dalam program Python Anda. Lihat sumber Oracle_test.py di bawah ini. Perhatikan bahwa saya harus menyetel koneksi dan string SQL ke Unicode untuk versi cx_Oracle saya.
Sumber:oracle_python.bat
@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%
Sumber: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()
Kemungkinan Masalah:
- "ORA-12705:Tidak dapat mengakses file data NLS atau lingkungan tidak valid yang ditentukan" - Saya mengalami ini sebelum membuat perubahan registri NLS_LANG.
- "TypeError:argumen 1 harus unicode, bukan str" - jika Anda perlu menyetel string koneksi ke Unicode.
- "TypeError:mengharapkan None atau string" - jika Anda perlu menyetel string SQL ke Unicode.
- "ImportError:Pemuatan DLL gagal:Prosedur yang ditentukan tidak dapat ditemukan." - mungkin menunjukkan bahwa cx_Oracle tidak dapat menemukan DLL klien Oracle yang sesuai.