launchbadge/sqlx: Rust SQL工具包讓SQL在編譯時驗證檢查
SQLx是一個非同步的、純Rust†的SQL工具箱,具有編譯時檢查SQL查詢的功能,無需DSL。
- 跨平臺:作為原生 Rust,SQLx 將在任何支援 Rust 的地方編譯。
- 內建連線池與sqlx::Pool.
- 行流式傳輸。資料從資料庫非同步讀取並按需解碼。
- 自動語句準備和快取。使用高階查詢 API ( sqlx::query) 時,會為每個連線準備和快取語句。
- 簡單(未準備)查詢執行,包括將結果提取到Row高階 API 使用的相同型別。支援批量執行並返回所有語句的結果。
- 支援的傳輸層安全性 (TLS)(MySQL和PostgreSQL)。
- 支援儲存點的巢狀事務。
- 真正的非同步。使用 async/await 從頭開始構建以實現最大併發性。
- 支援資料庫:PostgreSQL, MySQL, SQLite, 和 MSSQL.。
- 純Rust。Postgres 和 MySQL/MariaDB 驅動程式是用純 Rust 編寫的,無不安全unsafe程式碼。
- 執行時不可知論:適用於不同的執行時 ( async-std/ tokio/ actix) 和 TLS 後端 ( native-tls, rustls)。
SQLx 不是 ORM!
SQLx支援編譯時檢查的查詢。然而,它不是通過提供Rust API或DSL(特定領域的語言)來構建查詢。相反,它提供了一些巨集,將常規SQL作為輸入,並確保它對你的資料庫有效。
其工作方式是,SQLx在編譯時連線到你的開發資料庫,讓資料庫本身驗證(並返回一些資訊)你的SQL查詢。這有一些潛在的令人驚訝的影響。
- 由於SQLx從來不需要解析SQL字串本身,任何開發資料庫接受的語法都可以使用(包括由資料庫擴充套件新增的東西)。
- 由於資料庫讓你檢索到的關於查詢的資訊量不同,你從查詢巨集中得到的SQL驗證程度取決於資料庫
如果你正在尋找一個(非同步的)ORM,你可以檢視ormx或SeaORM,它是建立在SQLx之上的。
案例程式碼:
// provides `try_next` use futures::TryStreamExt; let mut rows = sqlx::query("SELECT * FROM users WHERE email = ?") .bind(email) .fetch(&mut conn); while let Some(row) = rows.try_next().await? { // map the row into a user-defined domain type let email: &str = row.try_get("email")?; } |
我們可以使用巨集sqlx::query!來實現對SQL的編譯時語法和語義驗證,輸出到一個匿名的記錄型別,其中每個SQL列是一個Rust欄位(在需要時使用原始識別符號)。
let countries = sqlx::query!( " SELECT country, COUNT(*) as count FROM users GROUP BY country WHERE organization = ? ", organization ) .fetch_all(&pool) // -> Vec<{ country: String, count: i64 }> .await?; // countries[0].country // countries[0].count |
相關文章
- sqlx是一個Rust SQL工具包:讓SQL在編譯時驗證檢查SQLRust編譯
- 【SQL】Oracle SQL共享池檢查SQLOracle
- rust sqlx 使用---增刪改查RustSQL
- 【MYSQL】Mysql常用檢查sqlMySql
- MySQL中普通sql與預編譯sql 區別MySql編譯
- 控制檯實時檢視 sqlSQL
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- Rust-Sqlx極簡教程RustSQL
- GraphJin:GraphQL自動編譯轉為SQL編譯SQL
- 精讀《手寫SQL編譯器-回溯》SQL編譯
- 預編譯SQL為什麼能夠防止SQL隱碼攻擊編譯SQL
- java 程式碼編譯檢查工具Java編譯
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- Rust 在 cargo 中進行條件編譯RustCargo編譯
- sql 注入越過登入驗證例項SQL
- 編譯檢查dsp程式碼的方法編譯
- HighgoDB查詢慢SQL和阻塞SQLGoSQL
- sql devloper 用法的和SQL 編寫SQLdev
- SQL Server 查詢超時問題排查SQLServer
- 如何讓在Linux檢查使用者賬戶到期時間Linux
- Hive SQL的底層編譯過程詳解HiveSQL編譯
- 精讀《手寫 SQL 編譯器 – 詞法分析》SQL編譯詞法分析
- 精讀《手寫 SQL 編譯器 - 詞法分析》SQL編譯詞法分析
- 精讀《手寫 SQL 編譯器 - 語法樹》SQL編譯
- 精讀《手寫 SQL 編譯器 - 文法介紹》SQL編譯
- 精讀《手寫 SQL 編譯器 – 文法介紹》SQL編譯
- 精讀《手寫 SQL 編譯器 - 語法分析》SQL編譯語法分析
- 精讀《手寫 SQL 編譯器 - 錯誤提示》SQL編譯
- 【SQL】Oracle查詢轉換之檢視合併SQLOracle
- 如何使用SQL查詢檢視,Postico使用技巧分享~SQL
- 一款SQL自動檢查神器,再也不用擔心SQL出錯了SQL
- Rust 條件編譯Rust編譯
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- Sql介紹 與 Sql基礎查詢SQL
- SQL--查詢SQL
- SQL 聚合查詢SQL
- 原生SQL查詢SQL