5 个版本
0.2.3 | 2024年3月26日 |
---|---|
0.2.2 | 2024年2月28日 |
0.2.1 | 2024年2月6日 |
0.2.0 | 2024年1月30日 |
0.1.0 | 2024年1月30日 |
#987 在 数据库接口
18KB
297 行
PostgreSQL 命名参数
此库允许在 PostgreSQL 查询中使用命名参数。此库特别旨在支持 rust-postgres。提供了一个宏,可以将带有命名参数的查询重写为查询及其位置参数。
依赖项
该宏展开为对 postgres-types
的使用,因此请确保将其包含在依赖项中
[dependencies]
postgres-types = ...
pg_named_args = ...
查询参数语法
该宏使用结构体语法来表示命名参数。结构体名称 Args
是必需的,以支持 rustfmt 和 rust-analyzer。如下面的示例所示,命名参数也允许简写字段初始化。
let location = "netherlands";
let period = Period {
start: 2020,
end: 2030,
};
let (query, args) = query_args!(
r"
SELECT location, time, report
FROM weather_reports
WHERE location = $location
AND time BETWEEN $start AND $end
ORDER BY location, time DESC
",
Args {
location,
start: period.start,
end: period.end,
}
);
let rows = client.query(query, args).await?;
插入语法
对于 INSERT
,支持特殊的语法,这有助于避免列名列表与值之间的不匹配
let location = "sweden";
let time = "monday";
let report = "sunny";
let (query, args) = query_args!(
r"
INSERT INTO weather_reports
( $[location, time, report] )
VALUES
( $[..] )
",
Args {
location,
time,
report
}
);
client.execute(query, args).await?;
IDE 支持
首先,此宏使用的语法与 rustfmt 兼容。像平常一样运行 rustfmt,它将格式化宏。
其次,该宏以 rust-analyzer "友好" 的方式实现。这意味着 rust-analyzer 知道哪些参数是必需的,并且可以完成它们。使用代码操作 "填充结构体字段" 或让 rust-analyzer 完成字段名称。
目标
-
提高从 Rust 执行 PostgreSQL 查询的可用性。
-
降低查询参数不匹配的风险。
-
支持 rustfmt 以帮助格式化。
-
支持 rust-analyzer 完成和一些代码操作。
贡献
我们欢迎社区对此项目的贡献。
在做出任何贡献之前,请阅读我们的 贡献条款。
任何有意提交以包含在内的贡献,应遵守 Rust 标准许可模型(MIT 或 Apache 2.0),因此将双重许可,如下所述,不附带任何额外条款或条件
许可
此贡献在以下任一许可下双重许可
- Apache许可证第2版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
依赖项
~265–720KB
~17K SLoC