【问题标题】:How do I access an Oracle db without installing Oracle's client and cx_Oracle?如何在不安装 Oracle 客户端和 cx_Oracle 的情况下访问 Oracle 数据库?
【发布时间】:2026-01-24 11:10:01
【问题描述】:

我有两台分别运行 Python 2.4 和 2.6 的 RHEL 服务器。我需要访问的另一台服务器上有一个 Oracle 数据库。

我试图在我的 RHEL 服务器上安装 cx_oracle,但发现必须先安装 Oracle 客户端。

问题是,我没有权限在两台 RHEL 服务器上安装 Oracle 客户端。在同一台服务器上,Perl 程序可以使用以下命令连接到 Oracle 数据库:

DBI->connect("dbi:Oracle:host=myhost.prod.com;sid=prddb",'username','password')

在不安装 cx_oracle 和 Oracle 客户端的情况下,Python 可以做同样的事情吗?或者对如何自己编写一个模块来做同样的事情有什么建议?

提前致谢!

【问题讨论】:

  • 为了让 Perl 工作,安装了一个 Oracle 驱动程序,它与安装在同一台机器上的 Oracle 客户端通信,然后与 Oracle 数据库通信。你需要在你想连接的机器上安装客户端软件,所以听起来你已经配置好了,只需要安装你的 Python 驱动程序和代码。 Oracle 是一家非常吝啬的公司,并且严格控制他们的驱动程序,因此您需要使用任何可能的方式与他们的客户交谈。如果这意味着 cx_oracle 那么你将不得不走那条路。
  • 谢谢你们。我现在正在研究从 python 调用 perl DBI 模块。
  • 不要那样做。这是一个复杂且不可行的解决方案。要么用 Perl 编写它,这将是我的第一条路径,因为我比 Python 更了解 Perl,或者使用纯 Python 并加载其所需的驱动程序;使用你更了解的那个。

标签: python oracle python-2.6 cx-oracle


【解决方案1】:

摘自https://forum.omz-software.com/topic/184/oracle-database

Oracle 没有纯 Python 客户端,而且很可能永远不会。即使像 SQLalchemy 这样出色的第三方工具集,仍然依赖底层的 cx_Oracle 来与 Oracle 数据库服务器进行实际通信。

——同样,由 Google 决定,答案是否定的:截至目前,似乎不存在任何纯 Python Oracle 客户端。

【讨论】:

  • "...永远不会" 没有编码英雄可以证明相反的吗?这是可能的 - 不容易,但应该可行。
  • Pythonista 论坛的链接已损坏,但 Google 挽救了这一天!
【解决方案2】:

通常,您只需要库,它们不一定需要 sudo 权限。将它们提取到软件能够读取的位置并相应地设置以下环境变量:

ORACLE_HOME=path/to/where/you/extracted/libs
TNS_ADMIN=path/to/tnsnames.ora

我很幸运地跳过了 tnsnames,只在连接中指定了主机、端口等,但很可能你会需要它来用于 cx_oracle...我不记得我很久以前使用它的时候了.

【讨论】:

  • 这样就解决了用户的问题。但是问题“如何在不安装 Oracle 客户端和 cx_Oracle 的情况下访问 Oracle 数据库?”没有得到答复。
  • 如果您使用 Python 的库,那么您别无选择。至少,我不知道。如果你想使用 Oracle DB,你就按照他们的规则玩。
  • 如果可能,我使用 PostgresSQL :-) 在这种情况下,我们找到了解决方法。我们很快就会得到一个 http API。
【解决方案3】:

如果您不想使用 cx_Oracle,您应该使用 expect 脚本。 (对于python pexpect)。但是您需要小心处理所有期望。

【讨论】: