返回

通用类型的借用值在匹配中的寿命不够长

发布时间:2022-05-12 10:33:39 276
# 数据库# sql# 数据

我有这个函数用于快速SQL查询,这些查询只需要数据库中的一个值。我导入postgres 0.19.3库。

fn psql_query<'a, T>(db: &str, query: &str) -> Result
where
    T: postgres::types::FromSql<'a>,
{
    let client = Client::connect(&format!("host=localhost user=postgres password={} dbname={}", get_password(), db), NoTls);
    match client {
        Ok(mut client) => {
            match client.query_one(query, &[]) {
                Ok(row) => Ok(row.get(0)),
                Err(e) => Err(e)
            }
        }
        Err(e) => Err(e)
    }
}

目的:连接到数据库,如果不成功,返回Err();然后执行查询,如果出现问题,则返回Ok(值)或Err()。调用者可以确保获得请求的值或出错原因。最初,我有一个与返回类型完全相同的函数Result成功了!然后我意识到,也许我需要从数据库中查询其他数据类型,并考虑使用泛型类型,而不是实现单独的函数。当我修改函数以使用泛型类型时,我开始出现以下错误:

error[E0597]: `row` does not live long enough
   --> src/hc.rs:108:31
    |
100 | fn psql_query<'a, T>(db: &str, query: &str) -> Result
    |               -- lifetime `'a` defined here
...
108 |                 Ok(row) => Ok(row.get(0)),
    |                               ^^^^^^^^^^- `row` dropped here while still borrowed
    |                               |
    |                               borrowed value does not live long enough
    |                               argument requires that `row` is borrowed for `'a`

所以为什么row需要再活下去吗?我的意思是,我只想要get()挤进Ok().由于该值将被拥有并返还,rowclient可以放弃。即使是插入符号也表明了这一点row将在get(0)当我不再需要它的时候。如果get()将返回一个将返回值与row,我会理解,但我不认为是这样。为什么它只适用于字符串?我该怎么解决这个问题?(小标题)postgres::types::FromSql<'a>还有'a生命周期是由Row.get().)

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像