2014-09-04 3 views
0

Я использую 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() и сообщение не появляется.

+0

Это похоже на ошибку в скомпилированной части cx_Oracle, и она рушится, не поднимая исключение Python. –

+0

Когда я решил эту проблему, я ничего не нашел об этом. Я думаю, что неправильная настройка на моем компьютере происходит в этой ситуации, но я не могу понять, что это такое. Но, возможно, вы пишете, и это ошибка, я надеюсь, что разработчики все еще поддерживают эту библиотеку. –

+0

Похоже, он по-прежнему поддерживается - у него был выпуск 5.1.3 несколько месяцев назад. –

ответ

0

Я сам пробовал эту среду и не испытывал такого же поведения. Возможно, используйте faulthandler или gdb или какой-то эквивалент, чтобы выяснить, где происходит сбой? cx_Oracle все еще поддерживается (мной), поэтому, если вы можете найти ошибку, я с радостью исправлю ее! Это также может быть проблемой с IPython или ST3 или в некотором взаимодействии между этими двумя и cx_Oracle. Однако, поскольку я не могу реплицировать проблему, вам нужно будет предоставить трассировку стека, чтобы мы могли продолжить.

Смежные вопросы