与仓储交互

现在我们已经了解了建模的基础知识,可以创建我们的第一个仓储类了。仓储类包含所有标准的 CRUD 操作,以及一些高级功能,如分页、过滤和批量操作。

小技巧

本教程的完整代码可以在下面的 完整代码 部分找到。

在开始编写代码之前,让我们先看看同步和异步仓储中可用的函数。

仓储中的可用函数

备注

  • 所有三个批量 DML 操作都将利用特定于数据库方言的增强功能,以尽可能高效。除了使用高效的批量插入绑定外, 仓储还将在可能的情况下选择性地利用多行 RETURNING 支持。仓储将自动从 SQLAlchemy 驱动程序检测此支持, 因此无需额外交互即可启用此功能。

  • SQL 引擎通常对可以附加到 IN 子句中的元素数量有限制。仓储操作将自动将超过此限制的列表分解为 多个查询,这些查询在返回前会连接在一起。您无需在自己的代码中考虑这一点。

在以下示例中,我们将介绍在应用程序中使用仓储的几种方法。

模型仓储

这里我们导入 SQLAlchemyAsyncRepository 类并创建一个 AuthorRepository 仓储类。这就是包含所有集成仓储功能所需的全部内容。

仓储上下文管理器

由于我们将在 Litestar 应用程序之外使用仓储,我们将创建一个简单的上下文管理器来自动处理 Author 仓储的创建(和清理)。

repository_factory 方法将为我们执行以下操作:
  • 从 SQLAlchemy 配置自动创建新的数据库会话。

  • 在发生任何异常时回滚会话。

  • 在函数调用完成后自动提交。

创建、更新和删除数据

为了说明操作数据库中数据的几种方法,我们将演示各种 CRUD 操作:

创建数据:这是一个简单的插入操作,用于填充我们的新 Author 表:

更新数据:update 方法将确保对模型对象所做的任何更新都在数据库上执行:

删除数据:remove 方法接受要删除的行的主键:

现在我们已经了解了如何执行单行操作,让我们看看可以使用的批量方法。

批量数据操作

在本节中,我们将深入探讨仓储类处理批量数据操作的强大功能。我们的示例说明了如何高效地管理数据库中的数据。 具体来说,我们将使用一个包含美国州及其缩写信息的 JSON 文件。

以下是我们将要介绍的内容:

装载固件数据

我们将介绍一种加载固件数据的方法。固件数据是填充数据库并帮助在真实条件下测试应用程序行为的示例数据。 此模式可以根据您的需要进行扩展和调整。

您可以在这里查看 JSON 源文件:

美国州查找 JSON

您可以下载它:/examples/sqla/us_state_lookup.json 或在下方查看:

批量插入

我们将使用固件数据来演示批量插入操作。此操作允许您在单个事务中向数据库添加多条记录, 从而在处理较大数据集时提高性能。

分页数据选择

接下来,让我们探讨如何使用分页选择多条记录。此功能对于通过将数据分成可管理的"页面"或子集来处理大量数据非常有用。 LimitOffset 是可以与仓储一起使用的几种过滤器类型之一。

批量删除

这里我们演示如何执行批量删除操作。就像批量插入一样,使用批量记录方法删除多条记录比逐行执行更高效。

计数

最后,我们将演示如何计算数据库中剩余的记录数。

现在我们已经演示了如何在 Litestar 应用程序之外与仓储对象交互,我们的下一个示例将使用依赖注入 将此功能添加到 Controller 中!

完整代码

完整代码(点击展开)