<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SeaORMRust 異步動態(tài) ORM

          聯(lián)合創(chuàng)作 · 2023-09-30 01:31

          SeaORM 是 Rust 編寫的異步動態(tài) ORM,可用于在 Rust 中構(gòu)建輕量級和并發(fā)的 Web 服務(wù)。

          • 異步:依賴 SQLx
          • 動態(tài):基于 SeaQuery
          • 可測試
          • 面向服務(wù)

          示例代碼

          Entity

          use sea_orm::entity::prelude::*;
          
          #[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
          #[sea_orm(table_name = "cake")]
          pub struct Model {
              #[sea_orm(primary_key)]
              pub id: i32,
              pub name: String,
          }
          
          #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
          pub enum Relation {
              #[sea_orm(has_many = "super::fruit::Entity")]
              Fruit,
          }
          
          impl Related<super::fruit::Entity> for Entity {
              fn to() -> RelationDef {
                  Relation::Fruit.def()
              }
          }

          Select

          // find all models
          let cakes: Vec<cake::Model> = Cake::find().all(db).await?;
          
          // find and filter
          let chocolate: Vec<cake::Model> = Cake::find()
              .filter(cake::Column::Name.contains("chocolate"))
              .all(db)
              .await?;
          
          // find one model
          let cheese: Option<cake::Model> = Cake::find_by_id(1).one(db).await?;
          let cheese: cake::Model = cheese.unwrap();
          
          // find related models (lazy)
          let fruits: Vec<fruit::Model> = cheese.find_related(Fruit).all(db).await?;
          
          // find related models (eager)
          let cake_with_fruits: Vec<(cake::Model, Vec<fruit::Model>)> =
              Cake::find().find_with_related(Fruit).all(db).await?;

          Insert

          let apple = fruit::ActiveModel {
              name: Set("Apple".to_owned()),
              ..Default::default() // no need to set primary key
          };
          
          let pear = fruit::ActiveModel {
              name: Set("Pear".to_owned()),
              ..Default::default()
          };
          
          // insert one
          let pear = pear.insert(db).await?;
          
          // insert many
          Fruit::insert_many(vec![apple, pear]).exec(db).await?;

          Update

          use sea_orm::sea_query::{Expr, Value};
          
          let pear: Option<fruit::Model> = Fruit::find_by_id(1).one(db).await?;
          let mut pear: fruit::ActiveModel = pear.unwrap().into();
          
          pear.name = Set("Sweet pear".to_owned());
          
          // update one
          let pear: fruit::ActiveModel = pear.update(db).await?;
          
          // update many: UPDATE "fruit" SET "cake_id" = NULL WHERE "fruit"."name" LIKE '%Apple%'
          Fruit::update_many()
              .col_expr(fruit::Column::CakeId, Expr::value(Value::Int(None)))
              .filter(fruit::Column::Name.contains("Apple"))
              .exec(db)
              .await?;

          Save

          let banana = fruit::ActiveModel {
              id: Unset(None),
              name: Set("Banana".to_owned()),
              ..Default::default()
          };
          
          // create, because primary key `id` is `Unset`
          let mut banana = banana.save(db).await?;
          
          banana.name = Set("Banana Mongo".to_owned());
          
          // update, because primary key `id` is `Set`
          let banana = banana.save(db).await?;

          Delete

          let orange: Option<fruit::Model> = Fruit::find_by_id(1).one(db).await?;
          let orange: fruit::ActiveModel = orange.unwrap().into();
          
          // delete one
          fruit::Entity::delete(orange).exec(db).await?;
          // or simply
          orange.delete(db).await?;
          
          // delete many: DELETE FROM "fruit" WHERE "fruit"."name" LIKE 'Orange'
          fruit::Entity::delete_many()
              .filter(fruit::Column::Name.contains("Orange"))
              .exec(db)
              .await?;
          瀏覽 15
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  豆花视频成人 | 18成人网站在线观看 | 九一超级碰 | 男人手机天堂 | 日韩黄色A片吋影 |