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編譯
- 驗證TimesTen統計收集後SQL重新編譯SQL編譯
- rust sqlx 使用---增刪改查RustSQL
- 在SQL Server tempdb滿時檢查資料檔案SQLServer
- 【SQL】Oracle SQL共享池檢查SQLOracle
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-驗證檢查SQL
- Rust-Sqlx極簡教程RustSQL
- 在sql*plus裡編輯SQL命令SQL
- 【MYSQL】Mysql常用檢查sqlMySql
- MySQL中普通sql與預編譯sql 區別MySql編譯
- Rustyinject是Rust的編譯時依賴注入DI庫Rust編譯依賴注入
- SQL時間段查詢SQL
- 編譯期型別檢查 in ClojureScript編譯型別
- java 程式碼編譯檢查工具Java編譯
- 編寫 SQL 查詢:讓我們從基礎知識開始SQL
- 在UNIX、windows下讓ORACLE定時執行*.sql檔案WindowsOracleSQL
- Rust 在 cargo 中進行條件編譯RustCargo編譯
- Hive SQL 編譯過程詳解HiveSQL編譯
- 控制檯實時檢視 sqlSQL
- sql查詢檢視列備註SQL
- SQL Server之查詢檢索操作SQLServer
- Oracle 檢查命中率的SQLOracleSQL
- Rust 條件編譯Rust編譯
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- 編譯檢查dsp程式碼的方法編譯
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- 精讀《手寫SQL編譯器-回溯》SQL編譯
- GraphJin:GraphQL自動編譯轉為SQL編譯SQL
- 檢查sql or session 執行的進度SQLSession
- SQL語句執行進度檢查SQL
- Oracle資料庫健康檢查常用SQLOracle資料庫SQL
- 常用的檢查SQL Agent Job 語句SQL
- 如何讓在Linux檢查使用者賬戶到期時間Linux
- 預編譯SQL為什麼能夠防止SQL隱碼攻擊編譯SQL
- Rust 交叉編譯與條件編譯總結Rust編譯
- Rust 編譯器入門Rust編譯
- sql 注入越過登入驗證例項SQL
- Oracle PL/SQL編譯警告PLSQL_WARNINGSOracleSQL編譯