【问题标题】:cx_Oracle silently crashes on connect in python 2.7cx_Oracle 在 python 2.7 中的连接上静默崩溃
【发布时间】:2014-10-29 06:19:13
【问题描述】:

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

我尝试从 python 建立与 Oracle 数据库的连接。为此,我下载了 cx_Oracle-5.1.2-10g.win32-py2.7.msi 并安装它。

更新。这是一个错误。我的意思是 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 控制台和 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() 上终止并且没有出现任何消​​息。

【问题讨论】:

  • 听起来 cx_Oracle 的编译部分有一个错误,它在没有引发 Python 异常的情况下崩溃。
  • 当我用谷歌搜索这个问题时,我一无所获。我认为在这种情况下我的计算机上发生了错误的配置,但我不明白它是什么。但也许你是写的,这是错误,我希望开发者仍然支持这个库。
  • 它看起来仍在维护 - 几个月前发布了 5.1.3。

标签: python windows oracle ipython cx-oracle


【解决方案1】:

我自己尝试过这种环境,但没有遇到相同的行为。也许使用 faulthandler 或 gdb 或类似的东西来找出崩溃发生在哪里? cx_Oracle 仍然由我维护,所以如果你能找到一个错误,我会很乐意修复它!这也可能是 IPython 或 ST3 或这两者与 cx_Oracle 之间的某些交互的问题。但是,由于我无法重现该问题,因此您需要提供某种堆栈跟踪,以便我们继续进行。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2018-12-25
    相关资源
    最近更新 更多