Python中的Oracle数据库连接

2025年4月11日 | 阅读 8 分钟

在大多数情况下,处理许多与编程相关的任务,特别是处理大量数据集时,都需要在数据库上进行工作,这些数据库可以高效地存储、管理和检索大量数据。这类任务解决的一个例子通常涉及 Oracle 或 MySQL 数据库。利用 Python 的易用性,程序员可以在 cx_oracle 的帮助下执行多项操作,例如查询数据、更新记录以及处理数据库内的复杂功能。在接下来的章节中,我们将了解如何设置和使用 cx_oracle 来建立与 Oracle 数据库的连接并执行基本数据库操作。阅读本文档,您将清楚地了解如何在 Python 项目中连接 Oracle 数据库,使用 cx_Oracle,从而使应用程序更强大、更具可扩展性。

要使用 cx_Oracle 模块将 Oracle 数据库与 Python 连接,您需要使用 pip 命令安装该模块,打开命令提示符并键入以下命令

使用此命令,可以在 Python 中安装 cx-Oracle 模块,但必须先在 PC 上安装 Oracle 数据库。

Python 连接 Oracle 数据库的步骤

第 1 步:导入模块:安装 cx_oracle 后,在 Python 中导入 cx_oracle 以便使用 cx_oracle。此模块有助于将 Python 连接到 Oracle 数据库。

代码

第 2 步:建立连接:connect() 函数用于将 Oracle 数据库链接到 Python。此函数接受用户名、密码和数据库名称以及数据库主机和服务名称等输入。下面是一个使用 Python 连接 Oracle 数据库的示例。

代码

上面的代码创建了一个连接对象 con,该对象将 Python 程序与 Oracle 数据库连接起来。

第 3 步:创建游标:执行 SQL 查询和检索数据需要游标。要创建游标,请在连接对象上使用 cursor() 方法。

代码

第 4 步:执行 SQL 查询:execute() 和 executemany() 方法用于在 Python 中执行 SQL 查询。

a. 单次执行

代码

b. 使用绑定变量执行多个查询:executemany() 方法允许我们使用不同的 变量多次执行相同的查询。

代码

第 5 步:提交事务:对于数据操作查询(如 Insert、Update 和 Delete),除非提交事务,否则更改不会应用到数据库。使用 commit() 方法,检查更改是否已保存。

代码

第 6 步:获取结果:查询完成后,可以使用以下三种方法之一检索这些结果

a. fetchone():获取一行。

代码

b. fetchmany(int):此方法根据传递给函数的参数获取指定数量的行。

代码

c. fetchall():获取结果集中的所有行。

代码

第 7 步:关闭连接:在数据库上的所有操作完成后,最好关闭连接和游标,以便释放所有资源。

a. 关闭游标

代码

b. 关闭连接

代码

创建表

代码

输出

 
Table "employee" created successfully   

说明

上面的 Python 代码使用 cx_Oracle 库将 Oracle 数据库与 Python 连接。创建了一个名为 employee 的表。create_employee_table() 函数用于封装所有代码。在函数内部,使用上下文管理器创建数据库连接,这可以确保在创建表后自动建立连接。如果在处理过程中引发任何数据库错误,将打印错误消息。最后,调用该函数来执行表的创建。

数据定义语言 (DDL) 语句,如 CREATE、ALTER 和 DROP,不需要为 Oracle 数据库显式提交;它们在执行时会自动提交。通过调用带有游标对象的此方法,将特定的 DDL 命令传递给 Oracle 数据库。

使用 execute() 方法向表中插入记录

代码

输出

 
Record inserted Successfully   

说明

在上面的 Python 代码中,insert_department_record() 函数用于在数据库的 department 表中插入一条记录。这是通过使用 cx_Oracle 库将 Oracle 数据库与 Python 连接来实现的。该库通过提供连接字符串中的必需值来建立与数据库的连接。之后,创建并执行一个游标来运行 SQL 命令。INSERT INTO SQL 命令用于将 ID 为 10、名称为 Human Resources、位置为 New York 的新记录插入到 department 表中。运行命令后,它会提交事务以确认 department 记录已保存到数据库中。在执行期间引发的任何错误都将在 except 块中使用,其中会引发错误消息。最后,在 final 块中处理其余任务,例如关闭游标和终止连接。

使用 executemany() 方法向表中插入多条记录

代码

输出

 
Multiple records are inserted successfully   

说明

上面的 Python 代码使用 cx_Oracle 库将 Oracle 数据库与 Python 连接,并将多条记录插入名为 products 的数据库表中。首先尝试使用提供的凭据打开连接。如果失败,将显示错误以及一些适当的错误消息。数据库通过 Python 连接到系统,Python 创建一个实际运行 SQL 命令的游标。定义了一个包含产品信息(ID、名称和价格)的示例数据集。executemany 函数使用占位符执行,以将多条记录添加到 products 表中。如果引发任何错误,将创建适当的错误消息并打印到控制台。成功插入记录后,事务提交以保存更改;然后显示成功。最后,检查游标和数据库连接是否已正确关闭以释放资源。

您还可以提供字典列表作为输入。在上面的代码中,您可以直接提供占位符值,也可以使用绑定变量。绑定变量是命名值,便于在传递给 SQL 命令时管理数据。它们通过提供一种高效处理输入值的方法来提高代码的可读性和可维护性。当使用绑定变量时,字典的每个键都对应数据库中的一个列,关联的值表示要添加的数据。此方法可以简化准备要插入数据库操作中的数据过程,尤其是在处理复杂数据时。

字典列表允许更动态、更灵活的数据处理,尤其是在数据结构可能发生变化或查询以编程方式构建时。

使用 Select 查询和 fetchall()、fetchmany(int)、fetchone() 方法查看记录

代码

输出

 
All Products: (1, 'Laptop', 1200.99) (2, 'Smartphone', 699.50) (3, 'Tablet', 300.75) (4, 'Monitor', 150.00) (5, 'Keyboard', 45.99) (6, 'Mouse', 25.00) (7, 'Printer', 120.00) Three Products: (1, 'Laptop', 1200.99) (2, 'Smartphone', 699.50) (3, 'Tablet', 300.75) One Product: (1, 'Laptop', 1200.99)   

说明

上面的 Python 代码使用 cx_Oracle 库将 Oracle 数据库与 Python 连接,以检索数据并对 products 表执行操作。最初,代码尝试使用提供的凭据(用户名和密码)建立连接,如果连接失败,则会引发错误并打印该错误。成功连接到数据库后,代码会生成一个游标对象来执行 SQL 命令。它首先运行一个查询以从 products 表中获取所有记录,并打印每个产品的详细信息。此外,它使用 many (3) 方法获取前三条记录并显示结果。最后,代码使用 fetchone() 方法提取一条记录并打印该记录。为了提高代码的可读性,还添加了额外的错误处理来处理在获取数据时可能出现的潜在问题。代码还通过在代码末尾关闭游标和连接来确保正确释放资源,从而有效防止任何资源泄漏。