rust 指定使用sqlx的函数的特征边界

dxpyg8gm  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(113)

想使此函数成为泛型函数,但在指定参数T的边界时遇到问题
错误:1)“在此作用域中找不到类型DB在此作用域中找不到”
我不知道我是否应该包括::bind。我从铁 rust 分析仪那里得到的

pub async fn set_db_value<
    'q,
    T: std::marker::Sync
        + std::marker::Send
        + sqlx::query::Query<'q, DB, <DB as HasArguments<'q>>::Arguments>::bind,
>(
    key: &str,
    b: T,
) {
    let statement = format!("update preferences set {} = $1  where key = 'p'", &key);
    sqlx::query(&statement)
        .bind(&b)
        .execute(&pg)
        .await
        .unwrap();
}
gr8qqesn

gr8qqesn1#

假设pgsqlx::Pool<sqlx::Postgres>类型,以下是正确的边界:

pub async fn set_db_value<T>(key: &str, b: T)
where
    T: Sync
        + Send
        + for<'q> sqlx::Encode<'q, sqlx::Postgres>
        + sqlx::Type<sqlx::Postgres>,
{
    let statement = format!("update preferences set {} = $1  where key = 'p'", &key);
    sqlx::query(&statement).bind(&b).execute(&pg).await.unwrap();
}

相关问题