首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于时间戳列,tokio_postgres行到对象的serde_postgres映射失败

对于时间戳列,tokio_postgres行到对象的serde_postgres映射失败
EN

Stack Overflow用户
提问于 2020-12-10 14:19:33
回答 1查看 897关注 0票数 2

我有锈蚀actix项目,它使用tokio_postgres和serde_postgres。

代码语言:javascript
复制
acme=# \d job
                                             Table "public.job"
     Column      |            Type             | Collation | Nullable |               Default               
-----------------+-----------------------------+-----------+----------+-------------------------------------
 created_at      | timestamp without time zone |           | not null | CURRENT_TIMESTAMP

结构

代码语言:javascript
复制
#[derive(Debug, Deserialize, Serialize)]
pub struct Job {
    pub created_at: NaiveDateTime,
}

函数

代码语言:javascript
复制
pub async fn get_all_jobs(&self) -> Result<Vec<Job>, Error> {
        let client = self.pool.get_conn().await?;
        let query = "SELECT created_at FROM job";

        let rows = &client.query(query, &[]).await?;
        // ------------ Following line throws error --------------
        let jobs: Vec<Job> = from_rows(rows)?;

        // ------------ Following lines works fine ---------------
        // let mut jobs: Vec<Job> = Vec::new();
        // for row in rows {
        //    jobs.push(Job {
        //        created_at: row.get(0)
        //    })
        // }

        Ok(jobs)
    }

Cargo.toml

代码语言:javascript
复制
tokio = { version = "0.3", features = ["full"] }
serde = "1.0.117"
serde_derive = "1.0.117"
serde_json = "1.0.60"
serde_postgres = "0.2.0"
thiserror = "1.0.22"
tokio-postgres = { version = "0.5", features = ["with-uuid-0_8", "with-chrono-0_4"] }

当我遍历rows并手动将每一行映射到Job结构时,上面的代码执行得很好。我不喜欢这种手动方法,在这种方法中,serde_postgres::from_rows是为相同的任务设计的,但是它只对timestamp without time zone类型列失败。

我怀疑这是版本错配的问题,如果不是我遗漏了什么。如果任何人都能分享一些想法或解决方案,那将是一个很大的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 17:51:10

看来serde_postgres机箱不支持日期时间。参考

所以我实现了from_rows,就像这样

代码语言:javascript
复制
impl From<&Row> for Job {
    fn from(row: &Row) -> Self {
        Self {
            created_at: row.get("created_at")
        }
    }
}

这个很管用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65236303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档