【发布时间】: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