SeaORM 是一个用 Rust 编写的异步、动态的对象关系映射(ORM)库,旨在让你能以符合直觉的方式操作数据库,同时享受 Rust 带来的性能与安全优势。
它建立在 SeaQuery 这个查询构建器之上,并遵循“Active Record”(活动记录)模式,如果你熟悉其他语言的 ORM,会感到非常亲切。
它的核心设计是“分层抽象”:你可以在最上层使用直观的实体 API 进行 CRUD 操作,也可以在需要时向下深入到 SeaQuery 层,编写更复杂的 SQL 逻辑。
🚀 快速上手
1. 添加依赖
在你的Cargo.toml中,需要根据选择的数据库和异步运行时来配置 features:
toml
[dependencies] sea-orm = { version = "2.0.0", features = [ "sqlx-postgres", # 数据库驱动:可选 sqlx-mysql, sqlx-sqlite 等 "runtime-tokio-rustls", # 异步运行时:可选 runtime-tokio-native-tls "macros", # 过程宏,用于派生实体 "with-chrono", # 支持 chrono 时间库 ] }数据库驱动:你必须从
sqlx-mysql、sqlx-postgres、sqlx-sqlite等中选择一个或几个。异步运行时:通常与你的 Web 框架(如 Axum, Actix)保持一致,选择
runtime-tokio-rustls或runtime-tokio-native-tls。
2. 生成实体 (Entity)
SeaORM 采用“实体优先”的工作流。你可以通过命令行工具sea-orm-cli连接数据库,自动为每个表生成对应的实体代码。
shell
# 安装 CLI 工具 cargo install sea-orm-cli@^2.0 # 在项目根目录创建 .env 文件,设置 DATABASE_URL # DATABASE_URL=postgres://user:pass@localhost/db # 生成实体文件到 src/entities 目录 sea-orm-cli generate entity -o src/entities
生成的实体文件会定义表结构、列和关系,你可以在此基础上进行自定义。
3. 核心概念:Model 与 ActiveModel
Model:代表从数据库读取的一行数据,是不可变的 Rust 结构体。ActiveModel:用于写入操作(插入、更新、删除)。它为每个字段附加了状态,可以追踪哪些字段被修改了,从而避免竞态条件。
4. 执行 CRUD 操作
下面的示例演示了如何创建、查询和保存数据(基于 SeaORM 2.0 的写法):
rust
use sea_orm::*; use entities::user; // 建立数据库连接 let db = Database::connect("postgres://user:pass@localhost/db").await?; // 插入:创建一个 ActiveModel 并 insert let new_user = user::ActiveModel { name: Set("Bob".to_owned()), email: Set("bob@example.com".to_owned()), ..Default::default() }; let bob = new_user.insert(&db).await?; // 查询:使用 Entity 的 find 方法 let user = user::Entity::find() .filter(user::Column::Name.eq("Bob")) .one(&db) .await?; if let Some(user) = user { // 更新:将 Model 转换为 ActiveModel,修改字段后保存 let mut active_user: user::ActiveModel = user.into(); active_user.email = Set("new_email@example.com".to_owned()); active_user.update(&db).await?; }5. SeaORM 2.0 新特性
SeaORM 在 2026年7月发布了 2.0 稳定版,带来了多项改进:
新实体格式:关系可以直接作为类型化的字段定义在
Model中,代码更紧凑。嵌套 ActiveModel:可以构建一个包含关联数据的嵌套对象,一次性调用
save,SeaORM 会自动处理外键顺序并在一个事务中完成所有插入和更新。强类型列:列通过
COLUMN常量访问,其方法对类型更敏感,能在编译期发现类型不匹配的错误。同步支持:提供了非异步的 API,方便在嵌入式或阻塞上下文中使用。
🌊 生态工具
SeaORM 背后有一个完整的生态:
SeaORM Pro:一个基于 React + GraphQL 的专业管理后台,可以免费使用。
Seaography:可以快速从你的实体生成 GraphQL API。
SeaQuery:底层的 SQL 查询构建器,可以独立使用。
📖 谁在使用 SeaORM
许多知名的开源项目都在使用 SeaORM,例如高性能代码编辑器Zed、可观测性平台OpenObserve、流处理平台RisingWave等。
SeaORM 是 Rust 生态中一个非常活跃的 ORM 选择,如果你正在寻找一个功能全面、文档完善且社区活跃的数据库工具,它值得一试。
<think>我们只需要根据内容生成一个不超过150字的摘要。摘要要概括SeaORM是什么、主要特点、快速上手、新特性、生态和用户。注意字数限制。</think>SeaORM是Rust编写的异步ORM库,基于SeaQuery,遵循ActiveRecord模式,提供分层抽象,支持直观CRUD和复杂SQL。通过CLI生成实体,使用Model与ActiveModel操作数据库。2.0版新增关系字段、嵌套ActiveModel、强类型列及同步API,并有SeaORM Pro、Seaography等生态工具。被Zed、OpenObserve等知名项目采用,功能全面,值得尝试。