flaskmarshmallow是否将datetime序列化为unix时间戳?

2024-06-14 04:33:05 发布

您现在位置:Python中文网/ 问答频道 /正文

默认情况下,DateTime字段将被序列化为类似2020-02-02T13:25:33的格式,但我想将其序列化为unix时间戳。我已经阅读了flask棉花糖文档和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')

Tags: 方法formatfieldsdbdatetimetimecreateupdate
1条回答
网友
1楼 · 发布于 2024-06-14 04:33:05

你这样做是有道理的

您可以使用money patchDateTime,而不是覆盖它来简化整个应用程序中的导入。只要修改fields.DateTime.SERIALIZATION_FUNCSfields.DateTime.DESERIALIZATION_FUNCS就完成了

从时间戳到时间戳的序列化是一项古老的任务,但我们尚未完成:

相关问题 更多 >