2016-02-19 212 views
-1

使用Python 3.4连接到Oracle 11(64位),但无论如何我都无法获得连接。我试过cx_Oracle软件包和pyodbc软件包都没有成功。连接到Oracle的Python问题(cx_Oracle和Pyodbc)

试图与cx_Oracle

conn = cx_Oracle.connect('username/[email protected]') 

 oradsn = cx_Oracle.makedsn(host, port, server) 
     conn = cx_Oracle.connect(user="username, password=password, dsn=oradsn") 

错误:无法获取Oracle环境处理


试图与pyodbc

conn = pypyodbc.connect('DRIVER={ORACLE ODBC DRIVER};DBQ=dsn name;UID=username;PWD=password') 

conn = pyodbc.connect('DSN=dsn;SERVER=server;UID=username;PWD=password') 

错误:指定的驱动程序无法加载由于系统错误1114:一个动态链接库(DDL)初始化例程失败。 (< ---- sqora32.dll在那个位置,我已经检查)


环境变量:

ORACLE_HOME = C:\Oracle\Ora11_x64 

有什么建议?

谢谢

回答

0

我的问题最终被pyinstaller与Cx_oracle一起使用。我从我的python脚本创建一个单一的可执行文件,事实证明pyinstaller包含一个OCI.dll文件。一旦我改变了Pyinstaller删除该文件,其他系统上的所有连接都与可执行文件完全相同。

点击此处了解详情:https://mail.python.org/pipermail/tutor/2014-December/103608.html

^^在上面的例子中他将.dll文件,但我发现我的通过删除OCI工作。dll文件,并忽视另一种他是在谈论

以及怎样改变pyinstaller:https://pythonhosted.org/PyInstaller/#using-spec-files

0

首先,在Windows上,不要使用环境变量ORACLE_HOME。这应该只在Linux/Unix平台上使用。你应该改用PATH环境变量。

其次,利用SQL * Plus确认您能够连接到数据库。有相当多的讨论如何做到这一点的网页。这里是一个:

http://penguinman-techtalk.blogspot.ca/2009/02/sqlplus-connection-to-remote-oracle.html

最后,如果你想makedsn你需要做以下使用:

dsn = cx_Oracle.makedsn(host, port, server) 
conn = cx_Oracle.connect(user, pwd, dsn) 

如果你只是想连接到由当地TNSNAMES引用数据库.ORA文件(称为tnsentry),你可以做到以下几点:

conn = cx_Oracle.connect(user, pwd, tnsentry) 

OR

conn = cx_Oracle.connect("user/[email protected]") 
+0

谢谢回答!几个问题: 1. PATH变量应该是什么样子? 2.我无法通过SQL Plus连接(TNS适配器错误(?))。但是,我可以通过Oracle SQL Developer进行连接。不知道这是什么意思。 –

+0

PATH环境变量应包含SQL * Plus可执行文件和客户端库的位置。 SQL Developer使用Java,而SQL * Plus(和cx_Oracle)使用OCI,因此它们使用不同的方法进行连接。 TNS适配器错误只是意味着你的连接字符串错误。如果您提供了连接方式的详细信息,可能会帮助我进一步提供帮助。 :-) –

+0

好吧,我改变了我的连接字符串,并能够连接到SQLPlus!好消息。但我仍然得到'无法获取Oracle环境句柄错误。我的PATH变量在字符串中有'C:\ Oracle \ Ora11_x64 \ BIN'。我应该提到,tnsnames.ora文件不包含我的连接,并且我没有访问权限来更改该文件。我仍然可以使用Cx_oracle进行连接吗? –