Вот что сработало для меня. Мои версии Python и Oracle немного отличаются от ваших, но должен применяться тот же подход. Просто убедитесь, что версия cx_Oracle для двоичной установки совпадает с версией клиента Oracle и Python.
Мои версии:
- Python 2.7
- Oracle Instant Client 11G R2
- cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
- Windows XP SP3
Этапы:
- Загрузите пакет Oracle Instant Client. Я использовал instantclient-basic-win32-11.2.0.1.0.zip. Распакуйте его до C: \ your \ path \ to \ instantclient_11_2
- Загрузите и выполните двоичный установщик cx_Oracle. Я использовал cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Я установил его для всех пользователей и указал на место Python 2.7, найденное в реестре.
- Задайте переменные среды ORACLE_HOME и PATH с помощью пакетного скрипта или любого другого механизма, который имеет смысл в контексте вашего приложения, чтобы они указывали на каталог Oracle Instant Client. См. Источник oracle_python.bat ниже. Я уверен, что для этого должно быть более элегантное решение, но я хотел как можно больше ограничить свои общесистемные изменения. Убедитесь, что вы разместили целевой каталог Oracle Instant Client в начале PATH (или, по крайней мере, опережаете любые другие клиентские каталоги Oracle). Прямо сейчас, я занимаюсь только командами, поэтому я запускаю oracle_python.bat в оболочке перед запуском любых программ, для которых требуется cx_Oracle.
- Запустите regedit и проверьте, есть ли ключ NLS_LANG в \ HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE. Если это так, переименуйте ключ (я изменил его на NLS_LANG_OLD) или отменил его. Этот ключ следует использовать только как значение NLS_LANG по умолчанию для клиента Oracle 7, поэтому его можно удалить, если вы не используете клиент Oracle 7 где-то еще. Как всегда, перед внесением изменений обязательно создайте резервную копию своего реестра.
- Теперь вы должны иметь возможность импортировать cx_Oracle в свою программу Python. См. Источник oracle_test.py ниже. Обратите внимание, что мне пришлось установить соединение и строки SQL в Unicode для моей версии cx_Oracle.
Источник: oracle_python.bat
@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%
Источник: oracle_test.ру
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()
Возможные проблемы:
- "ORA-12705: Не удается получить доступ к файлам данных NLS или недействительный среды, указанный" - я столкнулся с этим, прежде чем я сделал изменения реестра NLS_LANG.
- «ТипError: аргумент 1 должен быть unicode, а не str» - если вам нужно установить строку подключения в Unicode.
- «TypeError: ожидать None или string» - если вам нужно установить строку SQL в Unicode.
- «ImportError: Ошибка загрузки DLL: указанная процедура не найдена». - может указывать на то, что cx_Oracle не может найти соответствующую DLL-клиент Oracle.
Какой cx_Oracle вы хотите скачать? [Есть много] (http://cx-oracle.sourceforge.net/). Кроме того, какую версию Python, какую версию Oracle и какую операционную систему вы используете? –
cx_Oracle-5.0.2-10g.win32-py26 – user425194
Похоже, что он не может быть извлечен из PATH, который использует python для поиска модулей. Вы пытались установить его с помощью easy_install, а не явно (это может быть отсутствие другой зависимости). – JulesLt