连接到Oracle的Python问题(cx_Oracle和Pyodbc)

时间:2016-02-19 18:20:43

标签: python oracle odbc pyodbc cx-oracle

使用Python 3.4连接到Oracle 11(64位),但无论我尝试什么,我似乎无法建立连接。我已经尝试过cx_Oracle包和pyodbc包都没有成功。

尝试使用cx_Oracle

conn = cx_Oracle.connect('username/password@server')

        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

有什么建议吗?

由于

2 个答案:

答案 0 :(得分: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/pwd@tnsentry")

答案 1 :(得分:0)

我的问题最终是与Cx_oracle一起使用pyinstaller。我从我的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