如何在查询中动态插入列名!Rust sqlx 中的宏



我正在使用sqlx机箱与Postgres实例进行交互。

我有以下功能:

pub async fn fetch_tweets_by_metric(
pool: &PgPool,
metric: &str,
) -> Result<Vec<Tweet>, sqlx::error::Error> {
let tweets = sqlx::query_as!(
Tweet,
r#"
SELECT * 
FROM tweets
ORDER BY $1 DESC
"#,
metric,
)
.fetch_all(pool)
.await?;
Ok(tweets)
}

我想按表中的一列对结果进行排序,该列作为metric传入。如果我只是简单地传递一个带列名的字符串,它就不起作用(即上面的代码坏了(。

正确的方法是什么?我在文档/谷歌上找不到任何东西。

宏只能与常量SQL一起使用。

如果您的sql是动态的,请使用query函数:

pub async fn fetch_tweets_by_metric(
pool: &PgPool,
metric: &str,
) -> Result<Vec<Tweet>, sqlx::error::Error> {
let sql = format!(
r#"
SELECT * 
FROM tweets
ORDER BY {} DESC
"#,
metric,
);
let tweets = sqlx::query(sql)
.fetch_all(pool)
.await?;
Ok(tweets)
}

最新更新