SQLAlchemy 模型与仓储¶
Litestar 内置了一个仓储类(SQLAlchemyAsyncRepository),用于 SQLAlchemy,使 CRUD 操作更加简单。
特性¶
为 SQLAlchemy 2.0 预配置的
DeclarativeBase,包含基于 UUID 或 Big Integer 的主键、哨兵列,以及可选的带审计列的版本。用于 SQLAlchemy 模型的通用同步和异步仓储,支持选择、插入、更新和删除操作
实现了批量插入、更新和删除的优化方法,并在可能的情况下使用 lambda_stmt。
集成的计数、分页、排序、使用
LIKE、IN以及日期前后过滤。经过测试支持多个数据库后端,包括:
Postgres 通过 asyncpg 或 psycopg3(异步或同步)
MySQL 通过 asyncmy
Oracle 通过 oracledb
Google Spanner 通过 spanner-sqlalchemy
DuckDB 通过 duckdb_engine
Microsoft SQL Server 通过 pyodbc
基本使用¶
要使用 SQLAlchemyAsyncRepository 仓储,您必须首先使用包含的内置 DeclarativeBase ORM 基础实现之一定义模型:
UUIDBaseUUIDAuditBase
两者都包含基于 UUID 的主键,UUIDAuditBase 包含 updated_at 和 created_at 时间戳列。
UUID 将是支持它的数据库(如 Postgres)上的原生 UUID/GUID 类型。对于其他没有原生 UUID 数据类型的引擎,UUID 存储为 16 字节的 BYTES 或 RAW 字段。
BigIntBaseBigIntAuditBase
两者都包含基于 BigInteger 的主键,BigIntAuditBase 包含 updated_at 和 created_at 时间戳列。
使用这些基类的模型还包括以下增强功能:
基本控制器集成¶
声明模型后,您就可以在控制器和基于函数的路由中使用 SQLAlchemyAsyncRepository 类了。
或者,您可以为同步数据库连接使用 SQLAlchemySyncRepository 类。