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

时间:2018-08-28 13:27:19

标签: python orm peewee

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

这种方法的问题是,如果您执行任何可能影响多行的批量修改操作(例如UPDATE ... WHERE,DELETE ... WHERE),则Peewee可能看不到哪些更改

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

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

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