SQLAlchemy 模型与仓储

Litestar 内置了一个仓储类(SQLAlchemyAsyncRepository),用于 SQLAlchemy,使 CRUD 操作更加简单。

特性

  • SQLAlchemy 2.0 预配置的 DeclarativeBase,包含基于 UUID 或 Big Integer 的主键、哨兵列,以及可选的带审计列的版本。

  • 用于 SQLAlchemy 模型的通用同步和异步仓储,支持选择、插入、更新和删除操作

  • 实现了批量插入、更新和删除的优化方法,并在可能的情况下使用 lambda_stmt

  • 集成的计数、分页、排序、使用 LIKEIN 以及日期前后过滤。

  • 经过测试支持多个数据库后端,包括:

基本使用

要使用 SQLAlchemyAsyncRepository 仓储,您必须首先使用包含的内置 DeclarativeBase ORM 基础实现之一定义模型:

  • UUIDBase

  • UUIDAuditBase

两者都包含基于 UUID 的主键,UUIDAuditBase 包含 updated_atcreated_at 时间戳列。

UUID 将是支持它的数据库(如 Postgres)上的原生 UUID/GUID 类型。对于其他没有原生 UUID 数据类型的引擎,UUID 存储为 16 字节的 BYTESRAW 字段。

  • BigIntBase

  • BigIntAuditBase

两者都包含基于 BigInteger 的主键,BigIntAuditBase 包含 updated_atcreated_at 时间戳列。

使用这些基类的模型还包括以下增强功能:

  • 从类名自动生成蛇形命名法的表名

  • Pydantic BaseModel 和 Dict 类映射到优化的 JSON 类型,对于 Postgres 是 JSONB,对于 Oracle 是带 JSON 检查约束的 VARCHARBYTES,对于其他方言是 JSON

基本控制器集成

声明模型后,您就可以在控制器和基于函数的路由中使用 SQLAlchemyAsyncRepository 类了。

或者,您可以为同步数据库连接使用 SQLAlchemySyncRepository 类。