如何在查询中动态插入列名! Rust 的 sqlx 中的宏
How to dynamically insert a column name into the query! macro in Rust's sqlx
我正在使用 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 DESC
"#,
metric,
)
.fetch_all(pool)
.await?;
Ok(tweets)
}
我想按 table 中的其中一列对结果进行排序,作为 metric
传入。如果我只是传递一个带有列名的字符串,它不起作用(即上面的代码已损坏)。
正确的做法是什么?我在 google.
上的文档中找不到任何内容
宏只能与常量一起使用 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)
}
我正在使用 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 DESC
"#,
metric,
)
.fetch_all(pool)
.await?;
Ok(tweets)
}
我想按 table 中的其中一列对结果进行排序,作为 metric
传入。如果我只是传递一个带有列名的字符串,它不起作用(即上面的代码已损坏)。
正确的做法是什么?我在 google.
上的文档中找不到任何内容宏只能与常量一起使用 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)
}