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

Download history 1/week @ 2024-04-18 7/week @ 2024-04-25 2/week @ 2024-05-09 2/week @ 2024-05-16 2/week @ 2024-05-23 3/week @ 2024-05-30 1/week @ 2024-06-06 147/week @ 2024-06-13 6/week @ 2024-06-20 1/week @ 2024-07-04 303/week @ 2024-07-25 39/week @ 2024-08-01

每月下载量:342

Apache-2.0

13KB
206 代码行

sqlx-type

crates.io crates.io License actions-badge

宏进程来执行类似于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