微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在查询中动态插入列名! Rust 的 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 $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)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。