【问题标题】:Python and Oracle DB - "Error DPI-1050: Oracle Client library must be at version 11.2 or higher"Python 和 Oracle DB -“错误 DPI-1050:Oracle 客户端库必须为 11.2 或更高版本”
【发布时间】: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


【解决方案1】:

该错误表明您在 PATH 的较早位置安装了另一个旧版本的 Oracle 客户端。您应该在您的机器上搜索 OCI.DLL(使用 where.exe 或 dir 命令),然后移动或删除任何不必要的副本或根据需要调整 PATH。例如,一些较旧的应用程序不正确地将 OCI.DLL 填充到 C:\Windows\System32 中。

【讨论】:

  • 除非必要,否则不要搜索文件。使用where.exe 找出PATH 上的内容可以在Windows 上找到(which 在 Linux 上)。
  • where.exe 是 Windows 的标准部分吗?如果没有,您的建议将无济于事......也不会反对我的建议!
  • 是的,它是内置的。此外,删除其他应用程序可能依赖的文件也是危险的。
  • 也不保证安装的是旧版本。
  • c:\Windows\System32 中的那个很可能是旧的。您可以检查其版本信息,然后将其删除或将其移至其他位置。一开始就不应该把它放在那里,但有些应用程序这样做是为了方便。如果您仍然需要执行此操作的应用程序,那么很遗憾,您会被卡住。
【解决方案2】:

此问题与 Oracle Instant 客户端版本 19.3.0.0.0 有关。 我将其卸载并安装了以前版本的 Oracle Instant 客户端 12.2.0.1.0 并且它可以工作。 https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

在尝试上述方法之前要做的重要事情:

从 Windows 命令提示符

c:> where oci.dll 

确保只找到一个条目并删除多余的条目。

确保将环境路径设置为新安装的客户端。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2020-01-07
    相关资源
    最近更新 更多