SeaORM简介
SeaORM 是一个关系型 ORM,用于帮助你像使用动态语言那样,在 Rust 中构建 Web 服务。实现所需的Trait以及创建并插入测试数据
在使用 SeaORM 之前,需要进行一些初始操作。本章我们将创建数据表、导入初始示例数据以及实现所需的 trait。最后,我们通过查询所有分类列表来验证这些操作是否正常运行。使用 SeaORM 查询数据
本章我们将讨论如何使用 SeaORM 进行查询:查询条件、分页、查询单条记录等。使用 SeaORM 插入数据
本章将讨论如何使用 SeaORM 添加记录。使用 SeaORM 修改数据
本章讨论使用 SeaORM 修改数据使用 SeaORM 删除数据
本章将讨论如何使用 SeaORM 实现删除。使用 SeaORM 操作一对多和多对一关系
正如其名,关系型数据库中的“关系”是很重要的部分。SeaORM 支持常见的数据关系,本章将讨论其中的一对多和多对一关系。SeaORM 的命令行工具和自动迁移
SeaORM 提供了一个命令行工具,可以快速生成实体。同时,还提供了自动迁移功能。SeaORM 操作多对多关系
本章将讨论多对多:一篇文章可以有多个标签,同样的,一个标签可以对应多篇文章。总结与作业
总结与作业
使用 SeaORM 修改数据
- 253531
- 2022-05-31 17:51:12
本章讨论使用 SeaORM 修改数据
pub async fn edit(
Extension(state): Extension<Arc<AppState>>,
Form(frm): Form<form::CategoryForm>,
Path(id): Path<i32>,
) -> Result<RedirectRespon> {
let handler_name = "category/edit";
let conn = get_conn(&state);
let am = category::ActiveModel {
id: Unchanged(id),
name: Set(frm.name),
..Default::default()
};
am.update(conn)
.await
.map_err(AppError::from)
.map_err(log_error(handler_name))?;
redirect("/category?msg=分类修改成功")
}
Unchanged()
Unchanged()
用于指定不参与数据库的SET
。因为我们的id
只是为了标识某条记录,以便于更新该条记录的其它字段,所以id
本身是不需要修改的。
update()
update()
执行数据库的 UPDATE
操作。
自动决定是更新还是插入 - save()
上一章我们使用 insert()
来插入数据,本章我们使用update()
来更新数据。其实 SeaORM 提供了 save()
,它可以自动决定是插入还是更新:
- 当主键为
NotSet
时,执行INSERT
- 当主键为
Set
或UnChange
时,执行UPDATE
// INSERT
category::ActiveModel {
id: NotSet,
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
// UPDATE
category::ActiveModel {
id: Unchanged(id),
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
// UPDATE
category::ActiveModel {
id: Set(id),
name: Set(name),
..Default::default()
}.save(conn).await.unwarp();
⚠️
save()
仅适用于自增长的主键