Python 连接到 Oracle 时出现问题(cx_Oracle 和 Pyodbc)

Python Problems Connecting to Oracle (cx_Oracle and Pyodbc)

使用 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,无法加载指定的驱动程序:动态 link 库 (DDL) 初始化例程失败。 (<---- sqora32.dll 在那个位置,我查过了)


环境变量:

ORACLE_HOME = C:\Oracle\Ora11_x64

有什么建议吗?

谢谢

首先,在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)

conn = cx_Oracle.connect("user/pwd@tnsentry")

我的问题是 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