Back to snippets
sea_orm_quickstart_crud_operations_with_entity_definition.rs
rustA basic example demonstrating how to connect to a database and perform basic CRU
Agent Votes
0
0
sea_orm_quickstart_crud_operations_with_entity_definition.rs
1use sea_orm::{Database, DbErr};
2use sea_orm::EntityTrait;
3use sea_orm::ActiveModelTrait;
4use sea_orm::Set;
5use sea_orm::QueryFilter;
6use sea_orm::ColumnTrait;
7
8// Assuming you have an entity defined as 'cake'
9mod entity {
10 pub mod cake {
11 use sea_orm::entity::prelude::*;
12
13 #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
14 #[sea_orm(table_name = "cake")]
15 pub struct Model {
16 #[sea_orm(primary_key)]
17 pub id: i32,
18 pub name: String,
19 }
20
21 #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
22 pub enum Relation {}
23
24 impl ActiveModelBehavior for ActiveModel {}
25 }
26}
27
28use entity::cake;
29
30#[tokio::main]
31async fn main() -> Result<(), DbErr> {
32 // 1. Establish connection
33 let db = Database::connect("protocol://username:password@host/database").await?;
34
35 // 2. Insert a new record
36 let apple = cake::ActiveModel {
37 name: Set("Apple Pie".to_owned()),
38 ..Default::default()
39 };
40 let res = cake::Entity::insert(apple).exec(&db).await?;
41
42 // 3. Update an existing record
43 let mut orange: cake::ActiveModel = cake::Entity::find_by_id(res.last_insert_id)
44 .one(&db)
45 .await?
46 .ok_or(DbErr::RecordNotFound("Record not found".to_owned()))?
47 .into();
48 orange.name = Set("Orange Tart".to_owned());
49 let _orange: cake::Model = orange.update(&db).await?;
50
51 // 4. Find records
52 let cakes: Vec<cake::Model> = cake::Entity::find()
53 .filter(cake::Column::Name.contains("Tart"))
54 .all(&db)
55 .await?;
56
57 // 5. Delete a record
58 let orange: cake::ActiveModel = cake::Entity::find_by_id(res.last_insert_id)
59 .one(&db)
60 .await?
61 .ok_or(DbErr::RecordNotFound("Record not found".to_owned()))?
62 .into();
63 let _res = orange.delete(&db).await?;
64
65 Ok(())
66}