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
使用 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