cx_Oracle在python 2.7中的connect上无声崩溃

时间:2014-09-04 13:14:11

标签: python windows oracle ipython cx-oracle

我使用Windows 7,64bit,安装了Python 2.7和Oracle即时客户端10.2.0.3。

我尝试从python建立与Oracle数据库的连接。为此,我下载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附加了简单案例的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()上终止,并且不显示任何消息。

1 个答案:

答案 0 :(得分:0)

我自己尝试过这种环境,并没有遇到同样的行为。也许使用faulthandler或gdb或一些等价物来确定崩溃发生的位置? cx_Oracle仍在维护(由我),所以如果你能找到一个bug,我会乐意解决它!它也可能是IPython或ST3的问题,或者是这两者和cx_Oracle之间的某些交互。但是,由于我无法复制问题,因此您需要提供某种堆栈跟踪,以便我们继续进行。