sea_orm 增删改查demo
时间: 2023-07-07 18:31:07 浏览: 53
下面是一个简单的 `sea_orm` CRUD 操作的示例。
首先,我们需要创建一个数据库模型,用于描述数据库中的表和列。以下是一个示例模型:
```rust
use sea_orm::{Database, EntityTrait, FromQueryResult, IntoActiveModel, QueryFilter, QueryOrder, SeaRc, SetTrait};
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "users")]
pub struct UserModel {
#[sea_orm(primary_key)]
pub id: i32,
pub name: String,
pub email: String,
pub age: i32,
}
```
在上面的代码中,我们定义了一个名为 `UserModel` 的实体模型,它对应了数据库中的 `users` 表,包含了 `id`、`name`、`email` 和 `age` 四个列,并将 `id` 列标记为主键。
接下来,我们可以使用 `sea_orm` 提供的 API 来执行 CRUD 操作。以下是一个示例代码,演示了如何使用 `sea_orm` 进行增删改查操作:
```rust
use sea_orm::{DbConn, IntoActiveModel, QueryFilter};
// 连接到数据库
let db = DbConn::connect("mysql://root:password@localhost:3306/mydb").await?;
// 插入一条新记录
let new_user = UserModel {
id: 1,
name: "Alice".to_owned(),
email: "alice@example.com".to_owned(),
age: 25,
};
let inserted_user = new_user.clone().into_active_model();
let inserted_user = UserModel::insert(inserted_user).exec(&db).await?;
// 根据主键查询记录
let user = UserModel::find_by_id(inserted_user.id).one(&db).await?;
assert_eq!(user, inserted_user);
// 更新记录
let updated_user = UserModel {
id: inserted_user.id,
name: "Bob".to_owned(),
email: "bob@example.com".to_owned(),
age: 30,
};
let updated_user = updated_user.clone().into_active_model();
let updated_user = UserModel::update(updated_user).exec(&db).await?;
// 再次查询记录,验证是否更新成功
let user = UserModel::find_by_id(updated_user.id).one(&db).await?;
assert_eq!(user, updated_user);
// 删除记录
let deleted_user = UserModel::delete()
.filter(UserModel::id.eq(updated_user.id))
.exec(&db)
.await?;
assert_eq!(deleted_user, 1);
```
在上面的代码中,我们首先连接到了数据库,然后使用 `into_active_model` 方法将一个 `UserModel` 结构体转换为一个 `ActiveModel<UserModel>`,从而能够进行插入操作。接着,我们使用 `find_by_id` 方法根据主键查询记录,使用 `update` 方法更新记录,使用 `delete` 方法删除记录。
需要注意的是,在执行 CRUD 操作时,我们需要使用 `exec` 或 `one` 方法来执行查询或修改操作。这些方法会返回一个 `Result` 或 `Result<Option<T>>` 对象,我们可以使用 `?` 运算符来处理错误。