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` |
我们可以使用宏sqlx::query!来实现对SQL的编译时语法和语义验证,输出到一个匿名的记录类型,其中每个SQL列是一个Rust字段(在需要时使用原始标识符)。
let countries = sqlx::query!( |