29个版本
0.3.16 | 2024年6月13日 |
---|---|
0.3.13 | 2023年9月9日 |
0.3.11 | 2023年7月25日 |
0.3.8 | 2023年3月22日 |
0.1.2 | 2022年3月24日 |
在数据库接口中排名:995
每月下载量:342
13KB
206 代码行
sqlx-type
宏进程来执行类似于sqlx::query的类型化sql查询,但无需运行 cargo sqlx prepare
必须在使用crate的根目录中的"sqlx-type-schema.sql"中放置模式定义
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`cbool` tinyint(1) NOT NULL,
`cu8` tinyint UNSIGNED NOT NULL,
`cu16` smallint UNSIGNED NOT NULL,
`cu32` int UNSIGNED NOT NULL,
`cu64` bigint UNSIGNED NOT NULL,
`ci8` tinyint,
`ci16` smallint,
`ci32` int,
`ci64` bigint,
`ctext` varchar(100) NOT NULL,
`cbytes` blob,
`cf32` float,
`cf64` double
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `t1`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
请参阅sql_type::schema以获取详细描述。
然后可以使用此模式进行类型查询
use std::env, sqlx::MySqlPool, sqlx_type::query;
async fn test() -> Result<(), sqlx::Error> {
let pool = MySqlPool::connect(&env::var("DATABASE_URL").unwrap()).await?;
let id = query!("INSERT INTO `t1` (`cbool`, `cu8`, `cu16`, `cu32`, `cu64`, `ctext`)
VALUES (?, ?, ?, ?, ?, ?)", true, 8, 1243, 42, 42, "Hello world")
.execute(&pool).await?.last_insert_id();
let row = query!("SELECT `cu16`, `ctext`, `ci32` FROM `t1` WHERE `id`=?", id)
.fetch_one(&pool).await?;
assert_eq!(row.cu16, 1234);
assert_eq!(row.ctext, "Hello would");
assert!(row.ci32.is_none());
Ok(())
}
依赖
~2.7–4MB
~70K SLoC