问题描述
我正在使用 sqlx crate 与 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)
}