在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SeaORM的基礎用法

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-19 14:37 ? 次閱讀

SeaORM是一個基于Rust語言的ORM(對象關系映射)框架,它提供了一種簡單的方式來操作SQL數據庫。SeaORM的設計理念是將SQL查詢和Rust代碼結合在一起,從而提供更好的類型安全和代碼可讀性。

在本教程中,我們將介紹SeaORM的基本用法和進階用法。我們將使用SQLite數據庫來演示這些用法。

基礎用法

在使用SeaORM之前,我們需要將其添加到我們的Rust項目中。cargo.toml添加依賴:

sea-orm = "0.11.3"

連接到數據庫

在使用SeaORM之前,我們需要連接到一個數據庫。我們可以使用DatabaseConnection結構體來完成這個任務。

use sea_orm::{DatabaseConnection, DatabaseConnectionInfo};

#[async_std::main]
async fn main() - > Result< (), Box< dyn std::error::Error >> {
    let db_info = DatabaseConnectionInfo::from_env()?;
    let db_conn = DatabaseConnection::connect(&db_info).await?;
    // ...
    Ok(())
}

在上面的代碼中,我們使用DatabaseConnectionInfo::from_env()方法從環境變量中獲取數據庫連接信息,并使用DatabaseConnection::connect()方法連接到數據庫。

定義表

在SeaORM中,我們可以使用sea_query::Table結構體來定義表。我們可以定義表的名稱、列名和列類型。

use sea_query::{ColumnDef, ColumnType, Table};

let users = Table::new("users")
    .add_column("id", ColumnType::Int(Some(11)).Unsigned(true).NotNull(true).AutoIncrement(true))
    .add_column("name", ColumnType::String(Some(256)).NotNull(true))
    .add_column("email", ColumnType::String(Some(256)).NotNull(true).Unique(true))
    .add_column("age", ColumnType::Int(Some(3)).Unsigned(true).NotNull(true))
    .set_primary_key(vec!["id"]);

在上面的代碼中,我們定義了一個名為users的表,它有四個列:idnameemailageid列是自增的主鍵,nameemail列是字符串類型,age列是整數類型。

插入數據

在SeaORM中,我們可以使用InsertStatement結構體來插入數據。我們可以使用values()方法來設置要插入的值。

use sea_orm::{entity::*, query::*, DatabaseConnection};

let user = User {
    name: "John Doe".to_owned(),
    email: "[email protected]".to_owned(),
    age: 30,
};

let insert = Insert::single_into(User::table())
    .values(user.clone())
    .build();

let result = User::insert(insert).exec(&db_conn).await?;

在上面的代碼中,我們使用Insert::single_into()方法和values()方法來設置要插入的值。我們使用User::table()方法來獲取User實體的表格。最后,我們使用User::insert()方法和exec()方法來執行插入操作。

查詢數據

在SeaORM中,我們可以使用SelectStatement結構體來查詢數據。我們可以使用from()方法來設置要查詢的表格,使用column()方法來設置要查詢的列,使用where_expr()方法來設置查詢條件。

use sea_orm::{entity::*, query::*, DatabaseConnection};

let query = Select::from_table(User::table())
    .column(User::all_columns)
    .where_expr(User::email.eq("[email protected]"))
    .build();

let result = User::find_by_sql(query).one(&db_conn).await?;

在上面的代碼中,我們使用Select::from_table()方法和column()方法來設置要查詢的表格和列。我們使用where_expr()方法來設置查詢條件。最后,我們使用User::find_by_sql()方法和one()方法來查詢數據。

更新數據

在SeaORM中,我們可以使用UpdateStatement結構體來更新數據。我們可以使用set()方法來設置要更新的值,使用where_expr()方法來設置更新條件。

use sea_orm::{entity::*, query::*, DatabaseConnection};

let update = Update::table(User::table())
    .set(User::name, "Jane Doe")
    .where_expr(User::email.eq("[email protected]"))
    .build();

let result = User::update(update).exec(&db_conn).await?;

在上面的代碼中,我們使用Update::table()方法和set()方法來設置要更新的值。我們使用where_expr()方法來設置更新條件。最后,我們使用User::update()方法和exec()方法來執行更新操作。

刪除數據

在SeaORM中,我們可以使用DeleteStatement結構體來刪除數據。我們可以使用where_expr()方法來設置刪除條件。

use sea_orm::{entity::*, query::*, DatabaseConnection};

let delete = Delete::from_table(User::table())
    .where_expr(User::email.eq("[email protected]"))
    .build();

let result = User::delete(delete).exec(&db_conn).await?;

在上面的代碼中,我們使用Delete::from_table()方法和where_expr()方法來設置刪除條件。最后,我們使用User::delete()方法和exec()方法來執行刪除操作。

進階用法

關聯表查詢

在SeaORM中,我們可以使用JoinType枚舉來設置關聯類型。我們可以使用JoinOn結構體來設置關聯條件。

use sea_orm::{entity::*, query::*, DatabaseConnection};

let query = Select::from_table(User::table())
    .inner_join(Post::table(), JoinOn::new(User::id, Post::user_id))
    .column((User::name, Post::title))
    .build();

let result = User::find_by_sql(query).all(&db_conn).await?;

在上面的代碼中,我們使用Select::from_table()方法和inner_join()方法來設置關聯表格。我們使用JoinOn::new()方法來設置關聯條件。最后,我們使用User::find_by_sql()方法和all()方法來查詢數據。

事務處理

在SeaORM中,我們可以使用Transaction結構體來處理事務。我們可以使用begin()方法來開始事務,使用commit()方法來提交事務,使用rollback()方法來回滾事務。

use sea_orm::{entity::*, query::*, DatabaseConnection, Transaction};

let tx = Transaction::new(&db_conn).await?;

let user = User {
    name: "John Doe".to_owned(),
    email: "[email protected]".to_owned(),
    age: 30,
};

let insert = Insert::single_into(User::table())
    .values(user.clone())
    .build();

let result = User::insert(insert).exec(&tx).await?;

let update = Update::table(User::table())
    .set(User::name, "Jane Doe")
    .where_expr(User::email.eq("[email protected]"))
    .build();

let result = User::update(update).exec(&tx).await?;

tx.commit().await?;

在上面的代碼中,我們使用Transaction::new()方法來開始事務。我們使用User::insert()方法和exec()方法來插入數據,使用User::update()方法和exec()方法來更新數據。最后,我們使用tx.commit()方法來提交事務。

總結

在本教程中,我們介紹了SeaORM的基本用法和進階用法。SeaORM提供了一種簡單的方式來操作SQL數據庫,它將SQL查詢和Rust代碼結合在一起,提供了更好的類型安全和代碼可讀性。通過本教程的學習,我們可以更好地理解SeaORM的使用方法,從而更好地使用它來開發Rust應用程序。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SQL
    SQL
    +關注

    關注

    1

    文章

    779

    瀏覽量

    44668
  • 數據庫
    +關注

    關注

    7

    文章

    3876

    瀏覽量

    65464
  • 代碼
    +關注

    關注

    30

    文章

    4872

    瀏覽量

    69916
  • rust語言
    +關注

    關注

    0

    文章

    57

    瀏覽量

    3084
  • SeaORM
    +關注

    關注

    0

    文章

    1

    瀏覽量

    65
收藏 人收藏

    評論

    相關推薦

    SQLx的基礎用法和進階用法

    SQLx是一個Rust語言的異步SQL數據庫訪問庫,支持多種數據庫,包括PostgreSQL、MySQL、SQLite等。本教程將以SQLite為例,介紹SQLx的基礎用法和進階用法。 基礎用法
    的頭像 發表于 09-19 14:29 ?2687次閱讀

    Stream模塊的基礎用法和進階用法

    有用。在本教程中,我們將介紹 Stream 模塊的基礎用法和進階用法,并提供示例。 基礎用法 在本節中,我們將介紹 Stream 模塊的基礎用法,并提供基礎示例。 從 Vec 中創建
    的頭像 發表于 09-19 15:33 ?1406次閱讀

    基于Rust語言Hash特征的基礎用法和進階用法

    ,包括Hash trait、HashMap、HashSet等,本教程將詳細介紹Rust語言Hash特征的基礎用法和進階用法。 基礎用法 使用Hash trait 在Rust語言中,Hash trait
    的頭像 發表于 09-19 16:02 ?1661次閱讀

    常用燈頭規格及用法介紹

    常用燈頭規格及用法介紹 簡述常用燈頭規格及用法介紹
    發表于 04-19 15:40 ?56次下載

    鎳氫電池膠的用法

    鎳氫電池膠的用法
    發表于 11-10 09:39 ?720次閱讀

    狀態機原理及用法

    狀態機原理及用法狀態機原理及用法狀態機原理及用法
    發表于 03-15 15:25 ?0次下載

    Sniffer用法

    Snffer的定義、分類及基本用法步驟,操作成功后的現象、數據包信息
    發表于 05-30 15:08 ?0次下載

    電阻的巧妙用法

    電阻的巧妙用法
    發表于 12-16 12:59 ?0次下載

    MSF及Unicorn的介紹及用法

    MSF及Unicorn的介紹及用法
    發表于 09-07 15:09 ?3次下載
    MSF及Unicorn的介紹及<b class='flag-5'>用法</b>

    AI UX :設計助手用法

    本集討論了具有高投資回報率的用法類型,以及如何以及為什么要優先使用幫助用法
    的頭像 發表于 11-13 06:40 ?2018次閱讀

    #define的高級用法簡介

    #define的高級用法
    的頭像 發表于 02-05 11:50 ?4158次閱讀

    attribute 用法 section 部分

    attribute 用法 section 部分
    發表于 11-16 18:21 ?87次下載
    attribute <b class='flag-5'>用法</b> section 部分

    CMake用法詳解

    CMake用法詳解
    發表于 10-25 16:28 ?2次下載

    分享《verdi用法小結》的pdf

    分享Verdi用法小結的pdf文檔
    的頭像 發表于 02-18 20:21 ?1405次閱讀
    分享《verdi<b class='flag-5'>用法</b>小結》的pdf

    pcb插針的用法

    pcb插針的用法
    的頭像 發表于 12-13 16:58 ?2332次閱讀
    主站蜘蛛池模板: 亚色影视 | 免费网站直接看 | 天天看天天碰 | 好大好硬好深好爽想要免费视频 | 在线jlzzjlzz免费播放 | 一级毛片成人免费看a | 一区二区中文字幕 | 欧美人与z0zoxxxx特 | 美女视频网站免费播放视 | 2020国产v亚洲v天堂高清 | 中文字幕123区 | 国产精品美女自在线观看免费 | 97久久草草超级碰碰碰 | 综合色久七七综合七七蜜芽 | avtom影院永久地址人人影院 | 一级日本大片免费观看视频 | 天天射天天草 | 农村三级毛片 | 手机看片免费福利 | 亚洲成a人片毛片在线 | 69久久| 看黄网站免费 | 日本内谢69xxxx免费 | 欧美性视频一区二区三区 | 好大好猛好爽好深视频免费 | 国产精品久久久久久久久福利 | 性欧美xxxxhd | 一卡二卡三卡四卡无卡在线 | 在线免费视频国产 | 久操久操 | 精品综合久久久久久98 | 亚洲黄色网址大全 | 免费网站看黄 | 神马午夜在线观看 | 夜色伊人 | 亚洲欧美精品 | 狠狠干激情 | 欧美福利视频网站 | 伊人久久大香线蕉观看 | 喷潮白浆直流在线播放 | 涩多多在线观看 |