Я использую Windows 7, 64 бит, с установленным Python 2.7 и мгновенным клиентом Oracle 10.2.0.3.cx_Oracle бесшумно сбой при подключении в python 2.7
Я пытаюсь установить соединение с базой данных Oracle из python. Для этого я загружаю cx_Oracle-5.1.2-10g.win32-py2.7.msi и устанавливаю его.
upd. это ошибка. я имел в виду cx_Oracle-5.1.2-10g.win-amd64-py2.7.msi
Затем я пытаюсь соединить использовать код, как этот
import cx_Oracle
ad = cx_Oracle.makedsn('127.0.0.1', '1521', 'XE')
con = cx_Oracle.connect('user', 'password', ad)
И убедитесь, что соединение установлено правильно, выбрав некоторые строки из таблицы базы данных.
И в этот момент случается что-то интересное. Я выполняю описанные действия в трех разных средах: Sublime Text 3, Python Console и ipython.
Проблема в ST3, и в ipython этот фрагмент кода бесшумно выходит из строя на линии с cx_Oracle.connect
(я проверил это с оператором print
в разных местах).
Но в консоли python и в режиме ожидания он работает отлично. Более того, иногда он работает правильно в ipython, но я не могу понять, почему и когда. В ST3 он никогда не работает.
ST показывает сообщение [Finished in 0.4s with exit code 3221226356]
Чтобы продемонстрировать поведение питона и IPython консоли я придаю CopyPaste простого случая с ЦМД. Он просто выходит из ipython.
C:\Users\Alexey>python
Python 2.7.7 (default, Jun 1 2014, 14:21:57) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> cx_Oracle.connect()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-12560: TNS:protocol adapter error
>>> exit()
C:\Users\Alexey>ipython
Python 2.7.7 (default, Jun 1 2014, 14:21:57) [MSC v.1500 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 2.2.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import cx_Oracle
In [2]: cx_Oracle.connect()
C:\Users\Alexey>
Где находится проблема? Как я могу это решить? Спасибо заранее.
PS. Я пытался обрабатывать исключения в ST3 и IPython, такие как
try:
cx_Oracle.connect()
except Exception as e:
print e
но сценарий завершается на cx_Oracle.connect() и сообщение не появляется.
Это похоже на ошибку в скомпилированной части cx_Oracle, и она рушится, не поднимая исключение Python. –
Когда я решил эту проблему, я ничего не нашел об этом. Я думаю, что неправильная настройка на моем компьютере происходит в этой ситуации, но я не могу понять, что это такое. Но, возможно, вы пишете, и это ошибка, я надеюсь, что разработчики все еще поддерживают эту библиотеку. –
Похоже, он по-прежнему поддерживается - у него был выпуск 5.1.3 несколько месяцев назад. –