У меня есть куча объектов, которые хранятся в базе данных sqlite с использованием peewee ORM. Какой хороший шаблон для хранения всех изменений, внесенных в объекты.
Одна из моделей, которую я могу придумать, - это использовать автоматически увеличивающийся идентификатор для объектов и каждый раз, когда вносятся изменения, создавать новую копию. Есть ли лучший или более автоматический способ сделать это? Я могу посмотреть на какой-нибудь узор?
Я не против использования другого ORM, если он предлагает такую функциональность.
Единственный надежный способ сделать это - использовать триггеры базы данных. Обратной стороной является большая сложность.
Например, один из подходов может заключаться в том, что всякий раз, когда модель сохраняется (т.е. вызывается save ()), вы должны позаботиться о том, чтобы предыдущие данные сохранялись / изменения регистрировались.
Проблемы с таким подходом заключаются в том, что если вы выполняете какие-либо операции массового изменения (например, UPDATE ... WHERE, DELETE ... WHERE), которые могут повлиять на более чем одну строку, Peewee может не видеть, какие изменения.
Если вы буквально говорите об отслеживании «всех» изменений, единственный способ сделать это - использовать триггеры.
Если, с другой стороны, вы хотите отслеживать изменения в подмножестве полей, которые изменяются только определенным образом, вы можете обработать это на уровне модели (переопределив save () или что-то еще).
Вам также может быть интересно расширение signals
, которое может выполнять обратные вызовы всякий раз, когда модели сохраняются / удаляются: http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals