【问题标题】:Python Oracle DB Connect without Oracle Client没有 Oracle 客户端的 Python Oracle DB Connect
【发布时间】:2020-01-07 10:11:38
【问题描述】:

我正在尝试在 python 中构建一个应用程序,它将使用安装在公司服务器中的 Oracle 数据库,并且我正在开发的应用程序可以在任何本地机器上使用。

是否可以在 Python 中连接到 oracle DB 而无需在将存储和执行 python 应用程序的本地机器上安装 oracle 客户端?

就像在 Java 中一样,我们可以使用 jdbc 瘦驱动程序来实现相同的功能,这在 Python 中是如何实现的。

感谢任何帮助

安装oracle客户端,可以通过cx_Oracle模块进行连接。 但是在没有安装客户端的系统中,我们如何连接到数据库。

【问题讨论】:

  • 也许pypi.org/project/JayDeBeApi - 在 Python 中使用 Java JDBC 驱动程序。您仍然必须安装 JayDeBeApi 模块(而不是 Oracle 客户端),并从 Oralce 的站点下载驱动程序文件 (JAR)。
  • 我尝试安装此模块但出现以下错误错误:需要 Microsoft Visual C++ 14.0。
  • 看到这个article - python windows compilers。您使用的是 Windows,因此您需要安装与您的 Python 版本兼容的 Microsoft C++ 编译器。
  • python 其他功能运行良好。甚至 cx_Oracle 模块也可以正常工作。仅在安装 JayDeBeApi 模块时出错。
  • 如果目标机器都是Windows,可以把Oracle Instant Client库和cx_Oracle共享库放在同一目录下。

标签: python database oracle connect cx-oracle


【解决方案1】:

你可以使用 JDBC

"""
Connect from Python to Oracle via JDBC
Get JDBC-driver here: https://download.oracle.com/otn/utilities_drivers/jdbc/193/ojdbc8-full.tar.gz
Python 3.7.4
conda install -c conda-forge jaydebeapi==1.1.1 --force-reinstall -y
conda install -c conda-forge JPype1==0.6.3 --force-reinstall -y
"""
import jpype
import jaydebeapi

JHOME = jpype.getDefaultJVMPath()
jpype.startJVM(JHOME, '-Djava.class.path=/ojdbc8-full/ojdbc8.jar')
con = jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
                         'jdbc:oracle:thin:user/pass@host_ip:1521:SID')
cur = con.cursor()
cur.execute('select dummy from dual')
r = cur.fetchall()
print(r[0][0])
cur.close()
con.close()

【讨论】:

  • 这只是将一个巨大的依赖项 (java) 替换为另一个 (oci)。如果目标已经有java,好的,但是如果你试图限制依赖,这肯定是一个煎锅/火的情况。
【解决方案2】:

没有oracle提供的软件,java可以连接oracle是不正确的。

它需要兼容版本的 ojdbc*.jar 才能连接。同样python的cx_oracle库需要安装oracle的oracle Instant-client软件。

Instant Client 是免费软件,占用空间小。

【讨论】:

    【解决方案3】:

    安装 Oracle 客户端非常痛苦。您能否改为为具有 OCI 的系统创建一个 Web 服务,然后以这种方式连接到它?这可能最终成为一个更好的解决方案,而不是直接访问。

    【讨论】:

    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 2019-06-06
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多