跟踪数据库中基于 ORM 的对象所做的更改



我有一堆对象,它们使用 peewee ORM 存储在 sqlite 数据库中。存储对对象所做的所有更改的好模式是什么。

我能想到的一个模型是对对象使用自动递增的 ID,每次进行更改时,都会创建一个新副本。有没有更好或更自动的方法可以做到这一点?有没有我可以查看的模式?

如果另一个ORM提供此功能,我不反对使用它。

执行此操作的唯一万无一失的方法是使用数据库触发器。缺点是复杂性更高。

例如,一种方法是,每当保存模型(即调用 save(((时,您都要注意确保保留以前的数据/记录更改。

这种方法的问题在于,如果您执行任何类型的批量修改操作(例如 UPDATE...在哪里,删除...WHERE(,这可能会影响多行,Peewee 可能无法了解哪些更改。

如果您实际上是在谈论跟踪"所有"更改,那么执行此操作的唯一方法是使用触发器。

另一方面,如果要跟踪仅以特定方式更改的字段子集的更改,则可以在模型层中处理该更改(通过覆盖 save(( 或其他方式(。

您可能还对signals扩展感兴趣,它可以在保存/删除模型时执行回调:http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals

最新更新