如何在 Python 中使用 JDBC 驱动程序连接?

2025年3月7日 | 阅读6分钟

Python 在数据分析、人工智能和 Web 脚本中都有广泛应用,并且拥有许多使数据库操作变得容易的库。然而,Python 原生并不支持 JDBC(Java 数据库连接),这是一种仅限于 Java 应用程序进行数据库访问的常用方式。幸运的是,虽然通常需要借助 JayDeBeApi 这样的桥接器,但仍有方法可以在 Python 中通过 JDBC 驱动程序连接到数据库。

如果您需要处理仅提供基于 JDBC 的接口的系统(例如,旧系统或某些类型的企业级数据库解决方案),JDBC 会显得尤为宝贵。

什么是 JDBC?

JDBC 是一种接口,它为 DBMS 提供了一个独立于平台的连接,用于连接基于 Java 的应用程序和任何 4 类或 5 类 RDBMS。它使应用程序能够执行 SQL 语句、获取数据以及进行通用的数据库操作,而无需应用程序开发人员专门针对每个目标数据库进行开发。

如果您的工作主要集中在 Java 上,JDBC 是一个可选项。例如,如果您需要在 Python 中连接到支持 JDBC 的数据库,但不是在 Java 中,那么有一个变通方法,因为 Python 本身不支持 JDBC。

为什么要在 Python 中使用 JDBC?

尽管 Python 中有许多支持数据库连接的库,如 PyMySQL、psycopg2、sqlite3,但有时您需要改用 JDBC 驱动程序。一些常见的原因包括:

不存在原生的 Python 驱动程序

有些数据库,例如一些遗留的或企业级的数据库,没有原生的 Python 连接器。在这种情况下,除了使用 JDBC 驱动程序之外,没有更好的方法可以连接到数据库。这使得 JDBC 在您需要与不支持原生 Python 但当然提供 JDBC 驱动程序的“专业”数据库进行通信时非常有用。

跨语言集成

在某些组织中,Java 和 Python 都被使用,因此在两种语言中保持相同的行为可能非常重要。通过在 Python 环境中使用 JDBC 驱动程序,您可以实现 Java 和 Python 组件之间对等数据库的相当干净的集成。例如,假设您正在开发一个后端系统,其中 Java 使用 JDBC 进行数据库连接;在 Python 中使用优化的 JDBC 驱动程序来执行查询、进行优化以及保持 Java 和 Python 之间的行为兼容性。

驱动程序特定功能

某些 JDBC 驱动程序针对特定数据库进行了优化,或者提供了一些纯 Python 数据库模块无法实现的额外功能。例如:

许多 JDBC 驱动程序中提供的连接池和其他性能特性以及负载均衡功能,在某些环境中可能优于 Python 版本。

一些特殊功能,如存储过程、错误处理方法或专有数据库函数,可能只能通过 JDBC 获得。

JayDeBeApi:Python-JDBC 桥接器

要使用 JDBC 在 Python 中连接任何数据库,有一个 JayDeBeApi 库,它实现了遵循 DB-API 2.0 标准的交互式接口。JayDeBeApi 模块使 Python 能够通过 JDBC URL 连接数据库,从而允许 Python 与基于 Java 的 JDBC 驱动程序进行交互。

安装

以 JayDeBeApi 为例,需要注意的是,它可以被安装。您可以使用以下 pip 命令进行安装:

JayDeBeApi 使用 JPype,这是一个 Python 库,允许 Python 程序调用 Java 库。JayDeBeApi 将 JPype 作为其依赖项,可以单独安装,这使得与 JPype 的工作更加轻松。

JDBC 连接所需的组件

要使用 JayDeBeApi 在 Python 中建立 JDBC 连接,您需要:

  1. JDBC 驱动程序 JAR 文件:这是目标数据库的 JDBC 驱动程序,以 jar 文件的形式提供。所有数据库都有自己的 JDBC 驱动程序(例如,MySQL、PostgreSQL、Oracle 等)。
  2. JDBC URL:这是用于连接到数据库的 JDBC 连接字符串。它将取决于要使用的数据库类型。它们因组织中使用的数据库类型而异。
  3. 驱动程序类:用于连接到数据库的 Java 类。对于 JDBC,您必须知道驱动程序类名,该名称应由数据库供应商提供。
  4. 凭据:您的数据库用户名和密码。

基本示例:使用 JDBC 连接 MySQL 数据库

下面我们将介绍使用 JayDeBeApi 和 JDBC 连接 MySQL 数据库的必要步骤:-

安装 JayDeBeApi

运行此命令来安装该库:

下载 MySQL JDBC 驱动程序

MySQL JDBC 驱动程序可从 MySQL 官方网站获取,您应该下载 mysql-connector-java.jar 文件。保存此 .jar 文件在机器上的路径,文件路径应类似于 C: …

建立连接

现在,使用下面的 Python 脚本通过 JDBC 驱动程序连接 MySQL 数据库

在此示例中,请将 jdbc_url、username、password 和 jdbc_driver_jar 变量替换为您实际的数据库详细信息。

JDBC URL 格式

常见数据库的 JDBC URL 格式将根据具体数据库而变化。下面是流行数据库的常见格式:

MySQL

PostgreSQL

Oracle

SQL Server

在 JayDeBeApi 中使用 SQL 查询

连接到数据库后,您就可以执行各种操作,例如使用游标对象执行查询。游标是任何其他 Python 数据库库的基础部分。

执行查询:要执行任何 SQL 查询,需要使用 cursor.execute() 函数。例如:

获取数据:在测试查询时,可以使用 fetchall()、fetchone() 等方法或通过迭代游标来获取结果数据。

插入数据:还可以通过使用 execute() 方法插入数据。

提交事务:在对 MySQL 进行插入或更新操作时,必须使用 conn.commit() 提交事务。否则,更改将不会存储在数据库中。

关闭连接:完成后,您必须关闭游标和连接。

错误处理

与任何数据库连接一样,错误处理至关重要。您可以使用 Python 中的 try-except 块来捕获和处理异常。

结论

正如示例所示,在 Python 中使用 JayDeBeApi 和 JDBC 驱动程序在处理可能不受 Python 很好支持的数据库时提供了极大的灵活性。当没有原生的 Python 驱动程序可用时,或者当您正在处理使用 JDBC 接口的基于 Java 的系统时,这种方法非常有用。它还提供了利用 JDBC 的所有特性(如使用连接池执行附加操作并实现高吞吐量)的机会。作为连接 Python 和 JDBC 之间鸿沟的解决方案,它在处理 Java 和 Python 构建的应用程序的各种数据库方面都非常一致,因此在所有环境中都非常强大。无论您是处理旧的非原生驱动程序,还是想使用 JDBC 协议的特殊方面,JayDeBeApi 都为将 JDBC 驱动程序集成到您的 Python 环境中提供了一个便捷而快速的解决方案。