将None传递到tokio postgres sql客户端查询方法中



我在Rust项目中使用tokio-postgres,其中我有查询参数。

rows = client.query(QUERY,  &[&input1, &input2.unwrap()]).await.expect("error");

QUERY看起来像这个

QUERY: &str = "SELECT * FROM Table WHERE Name=$1 AND Address= COALESCE($2, Address);"

input2属于Rust选项类型,在将input2插入查询方法之前,我必须先打开它。有没有一种方法可以使查询方法处理";无";直接地我可以在外部编写条件语句,但对于有多个可选查询的情况,这将使源代码无法管理。

使用原始查询时,tokio_postgres无法管理None。根据我的经验,最好的解决方案是编写自己的查询生成器。

您根本不需要.unwrap(),可以按原样传递&input2Option<T>实现ToSql,其中T: ToSql,如果值为None,则它将把NULL传递到数据库:

let rows = client.query(
"SELECT * FROM Table WHERE Name=$1 AND Address=COALESCE($2, Address)",
&[&input1, &input2],
).await?;

我在本地数据库上测试的完整工作代码在这里可用。

最新更新