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 |
相關文章
- launchbadge/sqlx: Rust SQL工具包讓SQL在編譯時驗證檢查SQLRust編譯
- 驗證TimesTen統計收集後SQL重新編譯SQL編譯
- rust sqlx 使用---增刪改查RustSQL
- 在SQL Server tempdb滿時檢查資料檔案SQLServer
- Rustyinject是Rust的編譯時依賴注入DI庫Rust編譯依賴注入
- 【SQL】Oracle SQL共享池檢查SQLOracle
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-驗證檢查SQL
- 是的,又一個引數驗證工具包——validator
- 編寫一個 SQL 查詢來實現分數排名。SQL
- 在Excel VBA中寫SQL,是一種什麼體驗ExcelSQL
- gluesql/gluesql:一個用Rust編寫的SQL資料庫引擎庫包SQLRust資料庫
- Rust-Sqlx極簡教程RustSQL
- 在sql*plus裡編輯SQL命令SQL
- 【MYSQL】Mysql常用檢查sqlMySql
- MySQL中普通sql與預編譯sql 區別MySql編譯
- 檢視錶被 哪個SESSION 哪個SQL在使用SessionSQL
- SQL時間段查詢SQL
- 從一個案例看PL/SQL程式碼片的編譯與執行SQL編譯
- sql查詢時的一些格式操作SQL
- 編譯期型別檢查 in ClojureScript編譯型別
- java 程式碼編譯檢查工具Java編譯
- 【譯】Arc 在 Rust 中是如何工作的Rust
- 編寫 SQL 查詢:讓我們從基礎知識開始SQL
- 執行SQL語句查詢時出現一個SQLException異常SQLException
- 在UNIX、windows下讓ORACLE定時執行*.sql檔案WindowsOracleSQL
- Rust 在 cargo 中進行條件編譯RustCargo編譯
- Hive SQL 編譯過程詳解HiveSQL編譯
- 控制檯實時檢視 sqlSQL
- sql查詢檢視列備註SQL
- SQL Server之查詢檢索操作SQLServer
- Oracle 檢查命中率的SQLOracleSQL
- utlrp.sql 一次性統一編譯無效物件(pl/sql procedure等)SQL編譯物件
- sql 注入將會是一個笑話SQL
- 一款SQL自動檢查神器,再也不用擔心SQL出錯了SQL
- 在SQL Developer中Debug一個procedureSQLDeveloper
- 編寫 SQL 程式碼時常犯的九個錯誤SQL
- Rust 條件編譯Rust編譯
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL