【问题标题】:Explain the necessity of database drivers, libraries, dlls in a python application that interacts with a remote database? [closed]解释与远程数据库交互的 python 应用程序中数据库驱动程序、库、dll 的必要性? [关闭]
【发布时间】:2020-03-24 23:04:42
【问题描述】:

我编写了一个 python 脚本,它连接到远程 Oracle 数据库并将一些数据插入到它的表中。

在此过程中,我必须先导入 cx_Oracle 包并在我的本地计算机上安装 Oracle InstantClient 才能正确执行脚本。

我不明白为什么我必须安装 InstantClient? 我试图通读这些文档,但我相信我对数据库的工作和通信方式有一些基本的了解。

为什么我需要所有外部驱动程序、dll、库才能使 python 脚本能够与远程数据库通信?我相信这使得 python 可执行文件的打包和分发变得更加困难。 还有什么是 InstantClient 呢? 是司机吗?什么是司机?它只是一个知道如何与 Oracle 数据库通信的“程序”的集合吗?如果是这样,为什么不能通过简单的 python 包导入来完成呢?

这听起来像是我事先没有做自己的研究,但我很抱歉,我试过了,就像我说的,我相信我缺少一些基本的基础知识。

【问题讨论】:

    标签: python sql database oracle database-connection


    【解决方案1】:

    我们有一系列驱动程序可让您与 Oracle 数据库进行通信。其中大部分是搭载在 Oracle 客户端上的“包装器”。使用我们称为“Oracle Net”(不要与 .NET 混淆)的东西编译的 C 二进制文件与 Oracle 一起工作。

    因此,我们的 python、php、perl、odbc 等驱动程序是编写的小程序,可用于利用您系统上的 Oracle 客户端。

    Oracle 客户端不仅仅是一个驱动程序。它可以包括 SQL*Plus、SQL*Loader 等用户界面。或者它可以只是一组驱动程序 - 这取决于您选择下载和安装的确切软件包。说到“安装”——如果你使用 Instant Client,就没有什么可安装的了。您只需解压缩它并适当地更新您的环境路径位,以便可以加载驱动程序。

    【讨论】:

    • @thatjeffsmitth 感谢您的回答。这是否意味着我应该在任何我想使用所述 python 脚本的地方包含 InstantClient 和 python 脚本?因为 InstantClient 本身是一个相当大的目录,大约 90Mb。或者我可以进一步剥离它,只包含绝对必要的文件吗?
    • "要将 cx_Oracle 7 与 Python 和 Oracle 数据库一起使用,您需要:Oracle 客户端库。这些可以来自免费的 Oracle Instant Client,或者如果 Python 与数据库。“所以,是的。
    • 我认为cx_Oracle需要的“Oracle客户端”是Oracle调用接口(OCI)库。这些库知道连接到 Oracle DB 的 Oracle 网络协议。它们进行加密、缓存、提供高可用性等。要将任何东西连接到 Oracle DB,您必须使用 JDBC “Thin”、.NET 托管,或者您可以使用基于 OCI 的 API(JDBC “Thick”、.NET 非托管,或任何基于 OCI 的驱动程序,如 cx_Oracle、godror、node-oracledb 等)。底线:必须安装可以与网络协议通信的东西。
    • 可以,但解决方案因平台而异。在 Windows 上,只需将 Instant Client DLL 放在与 cx_Oracle 库相同的目录中。这是因为 cx_Oracle 使用 this code to load the Oracle client libraries。在其他平台上,您将需要一个将 LD_LIBRARY_PATH 设置为 Instant Client 库的位置的包装器 shell 脚本。
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2020-01-12
    • 1970-01-01
    相关资源
    最近更新 更多