Back to snippets

sea_orm_quickstart_crud_operations_with_entity_definition.rs

rust

A basic example demonstrating how to connect to a database and perform basic CRU

19d ago66 linessea-ql.org
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}