3个不稳定版本

0.3.0 2024年3月18日
0.2.1 2024年6月23日
0.2.0 2023年12月7日
0.1.0 2023年12月7日

数据库接口中排名第2817

MIT许可

21KB
94

PRQLX

将PRQL查询语言与SQLX宏功能相结合。

PRQL是一个令人惊叹的SQL DSL,但在SQLX中没有原生支持。这个crate通过在发送到SQLX(以及您的数据库)之前在Rust宏中编译PRQL来弥合这个差距。这意味着您可以使用PRQL语法与

  • 所有支持的SQLX数据库
  • 友好的编译器错误
  • 完全类型化的Rust

使用方法

cargo add prqlx
cargo add sqlx # requires sqlx to be installed by you so you can configure it correctly
use prqlx::{query, query_as};

async fn test_query() {
    // get your sqlx pool in whatever way
    let pool = get_database_pool().await;

    // simply use it like a regular sqlx query, except you now use PRQL!
    let val = query!(
        "
        from users
        select { id, name }
        "
    )
    .fetch_all(&pool)
    .await
    .unwrap();

    // Same thing with query_as!
    // Bindings also just work:tm:
    let val2 = query_as!(
        User,
        "
        from users
        select { id, name }
        filter id == $1
        ",
        123
    )
    .fetch_one(&pool)
    .await
    .unwrap();

    println!("{:?}", val2);
}

注意事项

PRQL不原生支持?用于绑定。您将不得不使用s"?"来处理。绑定时最好使用${num}

待办事项

并非所有宏都已被实现。目前只有queryquery_as。如果您想添加其他宏,请提交问题(或提交PR)!

测试/贡献

在运行cargo test之前,必须首先设置数据库。要这样做,请运行cargo run --example prepare以准备SQLite数据库。之后,您可以像平常一样进行开发。

依赖

~9–21MB
~256K SLoC