一文看懂流行的Rust ORM
譯文譯者 | 布加迪
審校 | 重樓
對(duì)象關(guān)系映射(ORM)是一種通過抽象數(shù)據(jù)庫(kù)交互的底層細(xì)節(jié)來簡(jiǎn)化應(yīng)用程序中數(shù)據(jù)訪問和操作的技術(shù)。ORM使您能夠使用首選編程語(yǔ)言來處理對(duì)象和類型,同時(shí)與關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)無縫集成。
如果您不精通SQL(結(jié)構(gòu)化查詢語(yǔ)言)或數(shù)據(jù)庫(kù)管理,ORM的框架設(shè)計(jì)對(duì)用戶友好。ORM提供了一個(gè)高級(jí)抽象層,讓您可以使用熟悉的面向?qū)ο缶幊谈拍钆c數(shù)據(jù)庫(kù)進(jìn)行交互,從而大大簡(jiǎn)化了應(yīng)用程序數(shù)據(jù)庫(kù)集成。
Rust、SQL數(shù)據(jù)庫(kù)和ORM
在Rust中構(gòu)建應(yīng)用程序時(shí),可能需要某種形式的持久性。您可以從Rust生態(tài)系統(tǒng)中的許多數(shù)據(jù)庫(kù)范式和庫(kù)中進(jìn)行選擇。
假設(shè)您希望使用關(guān)系數(shù)據(jù)庫(kù),您可以選擇使用SQL客戶端通過程序中的原始SQL查詢?cè)跀?shù)據(jù)庫(kù)管理系統(tǒng)上運(yùn)行SQL操作,或者使用ORM允許您使用的Rust內(nèi)置類型來處理數(shù)據(jù)庫(kù)。
Rust應(yīng)用程序中使用ORM有幾個(gè)好處。ORM讓用戶不需要手動(dòng)編寫復(fù)雜的、容易出錯(cuò)的查詢。相反,您可以利用ORM框架的強(qiáng)大功能,通過簡(jiǎn)單直觀的API進(jìn)行日常數(shù)據(jù)庫(kù)操作,比如插入、更新和查詢數(shù)據(jù)。使用ORM,您可以編寫在多個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)上工作的Rust程序,不必重寫數(shù)據(jù)庫(kù)管理系統(tǒng)特有的SQL查詢。
與其他語(yǔ)言不同,Rust沒有廣泛采用的ORM。然而,Rust生態(tài)系統(tǒng)中有許多ORM用于各種目的,并支持多種數(shù)據(jù)庫(kù),包括Diesel、SQLx、Sled和SeaORM等。
Diesel ORM
Diesel是一個(gè)Rust ORM,提供了全面的特性,使開發(fā)人員能夠高效地使用多個(gè)受支持的SQL數(shù)據(jù)庫(kù)。
Diesel提供了強(qiáng)類型和編譯時(shí)間安全特性、富有表現(xiàn)力的查詢API、自動(dòng)模式遷移、事務(wù)和錯(cuò)誤處理等特性。
由于其性能、效率、安全性和可靠性,以及社區(qū)積極地對(duì)項(xiàng)目做貢獻(xiàn),Diesel是首選的ORM。此外,Diesel兼容Rocket等其他Rust Web框架。
Diesel為數(shù)據(jù)庫(kù)操作提供了crate(庫(kù))和CLI工具。
您可以運(yùn)行該命令為首選數(shù)據(jù)庫(kù)安裝diesel_cli工具(在本例中是sqlite數(shù)據(jù)庫(kù),將參數(shù)更改為首選的支持diesel的SQL數(shù)據(jù)庫(kù)的名稱)。
cargo install diesel_cli --no-default-features --features sqlite
此外,您可以將Diesel添加到項(xiàng)目的依賴項(xiàng)部分,以便在項(xiàng)目中使用該crate。
[dependencies]
diesel = { version = "1.4.5", features = ["sqlite"] }
下面介紹如何在Rust文件中為項(xiàng)目的數(shù)據(jù)庫(kù)操作導(dǎo)入Diesel。
use diesel::prelude::*;
這把diesel::prelude模塊中的所有類型和特性導(dǎo)入當(dāng)前作用域。這樣一來就很容易使用Diesel的特性,不需要顯式導(dǎo)入每個(gè)類型或特性。
總的來說,Diesel是一個(gè)非常適合您數(shù)據(jù)庫(kù)項(xiàng)目的ORM和數(shù)據(jù)庫(kù)工具,因?yàn)樗幸粋€(gè)充滿活力的社區(qū)、大量在線教程以及對(duì)庫(kù)的大力支持。
SeaORM ORM
SeaORM是面向Rust的關(guān)系型ORM,可以幫助構(gòu)建Web服務(wù)。SeaORM擁有大量的特性和功能,旨在簡(jiǎn)化處理數(shù)據(jù)庫(kù)的過程,包括強(qiáng)大的查詢構(gòu)建、模式定義和遷移、關(guān)系映射、事務(wù)和連接池,并借助Rust的async/await語(yǔ)法支持異步操作。
值得注意的是,SeaORM的API旨在符合人體工程學(xué)、富有表現(xiàn)力,允許您編寫清晰簡(jiǎn)潔的數(shù)據(jù)庫(kù)查詢和操作。SeaORM直觀的語(yǔ)法和深思熟慮的抽象盡量減少了樣板代碼,并提高了生產(chǎn)力。
SeaORM為數(shù)據(jù)庫(kù)操作提供了CLI工具和crate。
下面是安裝sea- form –cli CLI工具的命令:
cargo install sea-orm-cli
您可以使用migrate init命令來編寫一個(gè)遷移文件,以設(shè)置數(shù)據(jù)庫(kù)和模式。
sea- form -cli migrate init
將sea-orm crate添加到項(xiàng)目Cargo.toml文件的依賴項(xiàng)部分,以安裝和使用SeaORM。
[dependencies]
sea-orm = { version = "0.9" }
在安裝了SeaORM之后,您可以用use語(yǔ)句將庫(kù)導(dǎo)入到Rust文件中,如下所示:
use sea_orm::entity::prelude::*;
use sea_orm::entity::prelude::*;語(yǔ)句將sea_orm::entity::prelude模塊中的所有類型和特性導(dǎo)入到當(dāng)前作用域,以允許您使用這些類型和特性,而不必使用sea_orm::entity::prelude前綴來限定它們的名稱。
SeaORM是一個(gè)出色的ORM,擁有充滿活力的社區(qū),還有出色的描述性文檔來幫助您入門。
SeaORM vs Diesel
為Rust項(xiàng)目選擇合適的ORM需要仔細(xì)考慮各種因素。
SeaORM和Diesel都提供了出色的性能,充分利用Rust的優(yōu)勢(shì)來優(yōu)化數(shù)據(jù)庫(kù)交互。SeaORM側(cè)重于簡(jiǎn)單性和直觀的API設(shè)計(jì),而Diesel注重編譯時(shí)檢查和安全性。
下面的表格比較了兩種ORM的特性和功能:
在Diesel和SeaORM之間進(jìn)行選擇取決于您的項(xiàng)目規(guī)格。Diesel已建立了社區(qū)支持,并因其強(qiáng)大的特性和性能而受到青睞。如果您注重編譯時(shí)檢查、安全性和簡(jiǎn)單性,那么Diesel很合適。
另一方面,SeaORM是新穎的,在不斷擴(kuò)展,它支持更多的SQL數(shù)據(jù)庫(kù)引擎和懶加載。如果您注重直觀的API設(shè)計(jì)和生產(chǎn)力,SeaORM可能更合適。
這兩種ORM都支持查詢、模式遷移和編譯時(shí)檢查。在做出決定之前,請(qǐng)考慮您在使用的數(shù)據(jù)庫(kù)管理系統(tǒng)和項(xiàng)目的大小。
Diesel讓處理數(shù)據(jù)庫(kù)輕而易舉
Rust的開源社區(qū)繼續(xù)在增強(qiáng)現(xiàn)有及新興軟件包和ORM的成熟度和功能方面取得重大進(jìn)展。
據(jù)稱,Diesel是Rust生態(tài)系統(tǒng)中最流行的ORM之一。Diesel的廣泛采用證明了其強(qiáng)大的功能、高效的性能和積極的社區(qū)支持。Diesel開發(fā)團(tuán)隊(duì)致力于完善和擴(kuò)展其功能,以確保它仍然是Rust開發(fā)人員眼里一款可靠、穩(wěn)健的ORM解決方案。
原文標(biāo)題:An Overview of Popular Rust ORMs,作者:Ukeje Chukwuemeriwo Goodness