我有一堆使用peewee ORM存储在sqlite数据库中的对象。什么是存储对对象所做的所有更改的良好模式?
我可以想到的一种模型是对对象使用自动递增的ID,并且每次进行更改时,都要创建一个新副本。有没有更好或更自动的方式来做到这一点?有没有我可以看的图案?
如果提供此功能,我不反对使用另一个ORM。
答案 0 :(得分:0)
执行此操作的唯一可靠方法是使用数据库触发器。缺点是复杂性更高。
例如,一种方法是,每当保存一个模型(即调用save())时,您都要小心确保先前的数据得以保留/记录更改。
这种方法的问题是,如果您执行任何可能影响多行的批量修改操作(例如UPDATE ... WHERE,DELETE ... WHERE),则Peewee可能看不到哪些更改
如果您实际上是在跟踪“所有”更改,那么执行此操作的唯一方法是使用触发器。
另一方面,如果您想跟踪仅以特定方式更改的字段子集的更改,则可以在模型层中处理该更改(通过覆盖save()或其他方法)。
您可能还对object
扩展名感兴趣,该扩展名可以在保存/删除模型时执行回调:http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals