【问题标题】:Using UTCTime with SQLite in Yesod在 Yesod 中使用 UTCTime 和 SQLite
【发布时间】:2013-10-25 18:26:57
【问题描述】:

在 Yesod 的模型中使用 UTCTime 字段时,我收到以下错误:

PersistMarshalError "field timestamp: Expected UTCTime, received PersistText \"09:18:07\""

我正在使用 SQLite 来存储我的数据库。我的模型如下所示:

Myobject
    timestamp UTCTime default=CURRENT_TIME
    otherfield Text

请注意,无论是否使用默认值,都会发生此错误。

我选择Myobject-entities 列表如下:

myobjects <- selectList [] [Desc MyobjectTimestamp]

使用MyobjectOtherfield 而不是MyobjectTimestamp 也无济于事,这是有道理的,因为所有数据都已获取并因此被封送。

here 有人问过类似的问题,但答案对我没有帮助。

在使用 SQLite 时如何在 Yesod 中使用UTCTime

编辑: 错误中提到的PersistText \"09:18:07\" 是该字段默认的值。

【问题讨论】:

    标签: sqlite haskell yesod


    【解决方案1】:

    您存储了一个文本值 "09:18:07",而它需要一个 UTCTime 值。您是否手动插入值?

    来自Data.TimegetCurrentTime 返回一个IO UTCTime 类型的值,因此您可以在GHCI 中使用putStr getCurrentTime 来获得有效的表示,或者在您的函数中使用now &lt;- liftIO getCurrentTime

    编辑: 因为getCurrentTime 返回类似2013-10-25 10:16:32.1627238 UTC 的时间戳,所以在数据库中插入类似的值应该可以解决错误。

    【讨论】:

    • 否,该值是作为默认值插入的。那我会把那个功能放在哪里呢?我可以更改编组的方式吗?
    • 至于默认值,我不知道。我所知道的是时间戳中的值应如下所示:2013-10-25 10:16:32.1627238 UTC 被 Yesod 接受为 UTCTime 值。您应该参考 SQLite 的文档以获取类似的时间戳。
    • 当我以该格式输入日期时,它确实有效,谢谢!将其包含在您的答案中,如果没有人解释为什么默认设置不起作用,我会接受您的。
    • 我也找到了默认的解决方案。使用CURRENT_TIMESTAMP 而不是CURRENT_TIME 可以解决问题。
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2012-01-24
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多