簡體   English   中英

Peewee ORM 中的 before_save() 和 after_save() 掛鈎?

[英]before_save() and after_save() hooks in Peewee ORM?

我在我的Flask 網站中使用Peewee ORM ,現在我想構建一個版本化/歷史記錄表,以便我可以跟蹤記錄的更改。 我正在遵循這個 SO answer中的基本 SQL 結構。

所以要做到這一點,我需要某種方式為字段的 .save() 方法插入觸發器,我想我曾經讀過某種 before_save 和 after_save 鈎子,但我再也找不到類似的東西了。

那么有人知道我可以如何連接額外的方法來保存、更新和刪除記錄,以及在 Peewee ORM 中創建表嗎?

歡迎所有提示!

這是playhouse.signals.pre_save的示例。 假設所有Model類都繼承自BaseModel ,這會為每個表添加時間戳。

import datetime as dt
from playhouse.signals import Model, pre_save
from peewee import DateTimeField


def timezone_now():
    """Infers timezone from user's OS. It knows EDT vs EST."""
    return dt.datetime.now(dt.timezone.utc).astimezone()


class BaseModel(Model):
    time_created = DateTimeField()
    time_updated = DateTimeField()

    class Meta:
        database = get_db()
    
    # Fetch as human-readable timestamps
    def created_at(self):
        return self.time_created.strftime('%Y%b%d_%H:%M:%S')
    def updated_at(self):
        return self.time_updated.strftime('%Y%b%d_%H:%M:%S')
    

@pre_save(sender=BaseModel)
def add_timestamps(model_class, instance, created):
    if (created==True):
        instance.time_created = timezone_now()
    instance.time_updated = timezone_now()
    # intentionally no `return`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM