【问题标题】:How to create timestamps automatically for MongoDB Schemas in python?如何在 python 中为 MongoDB 模式自动创建时间戳?
【发布时间】:2021-06-15 17:13:36
【问题描述】:

如何在 python 的模式中自动创建时间戳?

例如在 Javascript 中你可以做这样的事情

var thingSchema = new Schema({..}, { timestamps: true });

timestamps: true 将在我的架构中创建 created_at 和 update_at 字段 每次我更改该文档中的某些内容时,它也会更新 updated_at 字段 我如何在 python 中实现这一点

我的 python 架构如下所示

class UserSchema(BaseModel):
    id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
    user_name: str = Field(...)
    user_email: EmailStr = Field(...)
    
    class Config:
        allow_population_by_field_name = True
        arbitrary_types_allowed = True
        json_encoders = {ObjectId: str}

【问题讨论】:

    标签: python mongodb pymongo fastapi pydantic


    【解决方案1】:

    我不确定您对 create timestamps automatically 的含义,但如果您的意思是在实例化时添加时间戳

    import datetime
    class UserSchema(BaseModel):
        id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
        user_name: str = Field(...)
        user_email: EmailStr = Field(...)
        timestamp: datetime.datetime = datetime.datetime.now()
        
        class Config:
            allow_population_by_field_name = True
            arbitrary_types_allowed = True
            json_encoders = {ObjectId: str}
    

    这是官方文档的链接,其中提供了有关支持的不同日期和时间的更广泛示例。

    https://pydantic-docs.helpmanual.io/usage/types/#datetime-types

    【讨论】:

    • 是的,但那将是 createdAt 并且没有 updatedAt。在 Javascript 中,当您提供 { "timestamp": true } 时,它会自动为您创建并在您自动更新文档时更新 updatedAt 字段。
    • 哦,我明白了。那么,当您通过 PUT 请求更新它时,它会自动更改,还是?
    • 然后没有createdAt?但我想我必须有一个更新功能的包装器。像 updateWithTimestamp 这样的东西我会告诉你它是否有效
    • 最好的选择是拥有一个基本模型,然后通过目标方法(即 GET、POST、PUT)被其他模型继承
    • 嘿@AhmetK,Pydantic 文档建议对 updatedAt 行为使用 default_factory 字段属性:pydantic-docs.helpmanual.io/usage/models/… 看看这是否适合你想要做的事情。
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2016-10-02
    • 2022-01-14
    相关资源
    最近更新 更多