#postgresql #database-access #sql #macro

include-postgres-sql

A Yesql 启发的宏,用于在 Rust 中使用 PostgreSQL SQL

13 个版本

0.2.2 2023年3月7日
0.2.1 2023年2月13日
0.1.10 2023年2月7日
0.1.9 2022年11月15日
0.1.3 2022年2月22日

数据库接口 中排名 622

Download history 3/week @ 2024-04-22 4/week @ 2024-06-17 3/week @ 2024-07-01 71/week @ 2024-07-29

每月下载量 71

MIT 许可证

2MB
17K SLoC

SQL 16K SLoC // 0.0% comments Rust 793 SLoC // 0.1% comments

crates.io Documentation MIT

include-postgres-sqlinclude-sql 的扩展,用于在 Rust 中使用 Postgres SQL。它通过提供 impl_sql 宏来生成数据库访问方法,从而完善了 include-sql。include-postgres-sql 使用 Rust-Postgres 进行数据库访问。

示例

编写您的 SQL 并将其保存到文件中。例如,以下内容保存为项目 sql 文件夹中的 library.sql

-- name: get_loaned_books?
--
-- Returns the list of books loaned to a patron
--
-- # Parameters
--
-- param: user_id: &str - user ID
--
SELECT book_title
  FROM library
 WHERE loaned_to = :user_id
 ORDER BY 1

-- name: loan_books!
--
-- Updates the book records to reflect loan to a patron
--
-- # Parameters
--
-- param: book_titles: &str - book titles
-- param: user_id: &str - user ID
--
UPDATE library
   SET loaned_to = :user_id
     , loaned_on = current_timestamp
 WHERE book_title IN (:book_titles)

然后在 Rust 中使用它

use include_postgres_sql::{include_sql, impl_sql};
use postgres::{Config, NoTls, Error};

include_sql!("sql/library.sql");

fn main() -> Result<(),Error> {
    let mut db = Config::new().host("localhost").connect(NoTls)?;

    db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper")?;

    db.get_loaned_books("Sheldon Cooper", |row| {
        let book_title : &str = row.try_get(0)?;
        println!("{book_title}");
        Ok(())
    })?;

    Ok(())
}

或者,当选择 include-postgres-sql tokio 功能时

use include_postgres_sql::{include_sql, impl_sql};
use tokio_postgres::{Config, NoTls, Error};

include_sql!("sql/library.sql");

#[tokio::main]
async fn main() -> Result<(),Error> {
    let (db, conn) = Config::new().host("localhost").connect(NoTls).await?;
    tokio::spawn(async move {
        if let Err(e) = conn.await {
            eprintln!("connection error: {}", e);
        }
    });

    db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper").await?;

    db.get_loaned_books("Sheldon Cooper", |row| {
        let book_title : &str = row.try_get(0)?;
        println!("{book_title}");
        Ok(())
    }).await?;

    Ok(())
}

文档

包含的 文档 描述了支持的 SQL 文件格式,并提供了有关生成的代码的额外详细信息。

💥 0.2 版本的重大变更

  • include-sql 将可选语句终止符从 ; 更改为 /。使用 ; 终止符的 SQL 文件需要将其更改为 / 或完全删除。

依赖项

约 3.5-5MB
约 92K SLoC