Отслеживание изменений в объектах на основе ORM в базе данных

У меня есть куча объектов, которые хранятся в базе данных sqlite с использованием peewee ORM. Какой хороший шаблон для хранения всех изменений, внесенных в объекты.

Одна из моделей, которую я могу придумать, - это использовать автоматически увеличивающийся идентификатор для объектов и каждый раз, когда вносятся изменения, создавать новую копию. Есть ли лучший или более автоматический способ сделать это? Я могу посмотреть на какой-нибудь узор?

Я не против использования другого ORM, если он предлагает такую ​​функциональность.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
170
1

Ответы 1

Единственный надежный способ сделать это - использовать триггеры базы данных. Обратной стороной является большая сложность.

Например, один из подходов может заключаться в том, что всякий раз, когда модель сохраняется (т.е. вызывается save ()), вы должны позаботиться о том, чтобы предыдущие данные сохранялись / изменения регистрировались.

Проблемы с таким подходом заключаются в том, что если вы выполняете какие-либо операции массового изменения (например, UPDATE ... WHERE, DELETE ... WHERE), которые могут повлиять на более чем одну строку, Peewee может не видеть, какие изменения.

Если вы буквально говорите об отслеживании «всех» изменений, единственный способ сделать это - использовать триггеры.

Если, с другой стороны, вы хотите отслеживать изменения в подмножестве полей, которые изменяются только определенным образом, вы можете обработать это на уровне модели (переопределив save () или что-то еще).

Вам также может быть интересно расширение signals, которое может выполнять обратные вызовы всякий раз, когда модели сохраняются / удаляются: http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals

Другие вопросы по теме