【发布时间】:2019-02-08 16:46:57
【问题描述】:
几天前,我被要求开发一个能够连接到 Oracle 数据库的 Python 应用程序。由于我已经安装了 Oracle 客户端(版本 12.2.0),我只是 pip 安装了 cx_Oracle 并尝试使用以下代码建立连接:
import pandas as pd
import cx_Oracle
connection = cx_Oracle.connect('username/password@service_as_described_in_tnsnames.ora')
cur=connection.cursor()
input("Press Enter to continue...")
cur.execute('select* from MY_PRETTY_TABLE')
for line in cur:
print()
cur.close()
connection.close()
但在尝试运行它时,我收到错误“DPI-1050:Oracle 客户端库必须为 11.2 或更高版本”。谷歌搜索后,我找到了this 的答案,并尝试将我的代码更改为:
my_dsn = cx_Oracle.makedsn("host",port,sid="sid")
connection = cx_Oracle.connect(user="user", password="password", dsn=my_dsn)
cursor = connection.cursor()
querystring = "SQL query"
cursor.execute(querystring)
但是,同样的错误。需要注意的是,我已经在同一台机器上使用了 Oracle DB 客户端,将 DB 与 Power BI 连接起来。
另外,如果有帮助,我的路径设置为:
C:\instantclient_12_1
C:\Users\oracle2\product\12.1.0\client_1
C:\Users\oracle2\product\12.1.0\client_1\bin
C:\Users\oracle\product\12.2.0\dbhome_1\bin
【问题讨论】:
-
PATH可以设置为任何内容,甚至是不存在的目录。提供PATH上内容的不完整列表无济于事。重要的是PATH上的目录in 中的内容。此外,我们无法保证 Power BI 甚至使用相同的 Oracle 客户端。可能还有其他因素会影响它找到的版本。 -
此外,与随处可见的所有说明相反,将 Oracle 客户端永久放置在
PATH上只会让人头疼。我和我的同事多年来一直大量使用本地 Oracle 客户端,全局修改PATH带来的问题多于解决的问题。你会远远更好地编写应用程序来查找客户端本身,例如在进程启动时显式地在PATH前面加上捆绑客户端的位置,或者确保以其他方式加载捆绑的客户端在运行时。确保您处理 32/64 位。 -
哦,很高兴知道。但说真的,我真的不知道为什么我的问题被否决了,只是因为我什么都不知道......
-
反对票是我的。给出它的原因是我更详细地讨论here。简短的版本是修复这个基本上需要一个交互式调试会话,这不适合 SO。
-
@jpmc26 FWIW,Windows(仅限)上的未来 ODPI-C 3(以及因此 cx_Oracle 7)将 look first for Oracle Client libraries in the same directory as the ODPI-C or cx_Oracle binary is located it。这可能有助于某些安装方案,特别是对于创建软件包的人。
标签: python database oracle cx-oracle