如何在sqlx rust中定义一个日期时间字段

15

我有一个如下结构体?

pub struct Instrument {
  pub id:i32,
  pub expiry_on: <this should be a date field>
}

我应该给expiry_on什么类型。我想在sqlx::query_as!()内部使用结构体从postgres中获取记录?

expiry_on是一个timestampzPostgres字段。

3个回答

13

假设您的Postgres中的expiry_on字段是一个,根据您使用的时间库不同,您将需要向sqlx添加特性或

[dependencies]
sqlx = { version = "*", features = [ "chrono" ] }

或者

sqlx = { version = "*", features = [ "time" ] }

替代

sqlx = "*"

其中 * 代表你正在使用的版本。

然后在 Instrument 中更改以下内容(假设你正在使用的是 chrono):

pub struct Instrument {
    pub id: i32,
    pub expiry_on: chrono::DateTime<chrono::Utc>,
}

1
这不太对 - 对于chrono,特征序列化和反序列化未实现。 - yosemeti

2
为了完成 izik1 的回答 answer by izik1,我们可以按照以下步骤启用 chrono 的 serde 支持特性:
chrono = { version = "0.4.24", features = ["serde"] }

1
我只是想总结一下如何做这个:
# Cargo.toml:
[dependencies]
# get all required types
chrono = { version = "0.4.*", features = ["serde"] }
# enable sqlx-conversion traits for chrono-types
sqlx = { version = "0.6.*", features = [ "chrono",...] }

导入后,按照以下步骤进行操作:
pub struct Instrument {
    pub id: i32,
    # important: import from chrono-crate!
    pub expiry_on: chrono::DateTime<chrono::Utc>, 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接