Отслеживание изменений в объектах на основе ORM в базе данных - PullRequest
0 голосов
/ 28 августа 2018

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

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

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

1 Ответ

0 голосов
/ 28 августа 2018

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

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

Проблемы с таким подходом заключаются в том, что если вы выполняете какую-либо операцию массового изменения (например, ОБНОВЛЕНИЕ ... ГДЕ, УДАЛЕНИЕ ... ГДЕ), которая может повлиять на более чем одну строку, Peewee может не иметь представления о том, какие изменения .

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

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

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

...