【问题标题】:flask-marshmallow serialize datetime to unix timestamp?flask-marshmallow 将日期时间序列化为 unix 时间戳?
【发布时间】:2020-02-03 09:24:39
【问题描述】:

默认,DateTime 字段将被序列化为2020-02-02T13:25:33 之类的格式,但我想将其序列化为 unix 时间戳。我已经阅读了flask-marshmallow 文档和marshmallow 文档,我只找到了自定义输出日期时间格式的方法。所以我的问题是,我可以采取任何简单的解决方案来实现这一目标吗?

我有一个模型定义:

class Folder(CRUDMixin, db.Model):
    __tablename__ = 'folder'
    create_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    update_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)

这是架构定义:

class FolderSchema(marshmallow.Schema):
    create_time = DateTime(format='timestamp')
    update_time = DateTime(format='timestamp')

我找到了一种相当复杂的方法来实现这一点,我正在尝试寻找另一种简单的方法。

class DateTime(fields.DateTime):
    """
    Class extends marshmallow standard DateTime with "timestamp" format.
    """

    SERIALIZATION_FUNCS = \
        fields.DateTime.SERIALIZATION_FUNCS.copy()
    DESERIALIZATION_FUNCS = \
        fields.DateTime.DESERIALIZATION_FUNCS.copy()

    SERIALIZATION_FUNCS['timestamp'] = lambda x: int(x.timestamp()) * 1000
    DESERIALIZATION_FUNCS['timestamp'] = datetime.fromtimestamp


class FolderSchema(marshmallow.Schema):
    create_time = DateTime(format='timestamp')
    update_time = DateTime(format='timestamp')

【问题讨论】:

    标签: python marshmallow flask-marshmallow


    【解决方案1】:

    你这样做的方式是有意义的。

    您可以为 DateTime 打补丁而不是覆盖它以简化整个应用程序中的导入。只需修改fields.DateTime.SERIALIZATION_FUNCSfields.DateTime.DESERIALIZATION_FUNCS 即可。

    序列化到/从时间戳是一个旧的 TODO,但我们还没有完成它:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2015-09-26
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多