cx_Oracle молча вылетает при подключении в python 2.7

Я использую Windows 7, 64bit, с установленным Python 2.7 и Oracle Instant Client 10.2.0.3.

Я пытаюсь установить соединение с базой данных 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]

Чтобы продемонстрировать поведение в консоли Python и ipython, я прилагаю копию простого случая из cmd. Он просто выходит из 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() и сообщение не появляется.

1 ответ

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

Другие вопросы по тегам