[英]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.