SuperAPI AI 工具集

sea-orm

编程与开发

查看项目

更新于 10-15 20:31

技能介绍

用途:在 Rust 异步栈中用 SeaORM 做数据持久化,适合以 Axum 提供 HTTP、以 Postgres/MySQL/SQLite 为后端的项目。核心 crate 为 sea-orm(entities、查询、事务)、sea-orm-migration(异步 Migrator)、sea-orm-cli(按团队习惯生成 entity)。

主要能力与用法:启动时建立连接池,将 DatabaseConnection 克隆进 Axum State,禁止每请求 Database::connect。组合写入使用 db.transaction(|txn| async move { … })。查询用 Entity::find_by_id、find().filter().one/all;热列表用游标/keyset,避免深 offset。变更走 ActiveModel,避免盲更新全部字段。关系放在聚合模块内,不要堆成超长 entities.rs。

组织与迁移:migration/ 放 migrator crate,src/entities/ 放 Model、ActiveModel、Column,db.rs 负责连接与池。迁移在部署时先于 serve 执行,auto-migrate 仅在开发且仓库已有此做法时使用。

限制与注意:不要在同一聚合混用 SeaORM 与 sqlx;仓库已是 sqlx/Diesel 时不要引入 SeaORM。保留 crate 现有后端(如 sqlx-postgres)。错误需将 DbErr 映射为 AppError(404/409),响应中不得含 SQL。避免 find().all() 无限制、40 个 eager relations 的 God Entity、unwrap DbErr、handler 内拼 SQL 字符串。测试可配合 rust-unit-testing,可观测性用 tracing 在仓储层埋点。完成标准:池在 State、组合写入有事务、有 ownership/tenant 过滤、schema 变更走版本化迁移、DbErr 已映射、每聚合仅一种持久化风格。