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