Я бы хотел уменьшить количество записей, создаваемых в таблице истории. Мой текущий поток обновит объект дважды, и я хотел бы отфильтровать первое обновление.
Вот моя версионная таблица ...
from versioned_history.history_meta import Versioned
class Object(Versioned, Base):
id = sa.Column(sa.Integer(), primary_key=True)
value = sa.Column(sa.Integer())
status = sa.Column(sa.ENUM())
Если возможно, я бы хотел чтобы обновлять историю только в случае обновления статуса, а не только для любого столбца.
В SQLAlchemy есть эта статья по проблеме https://docs.sqlalchemy.org/en/13/orm/versioning.html
Из статьи есть два подходы. Я мог бы иметь собственный счетчик версий, который выглядел бы так ...
version = Column(Interger(), nullable=False)
__mapper_args__ = {
'version_id_col':version,
'version_id_generator':lambda version: version + 1
}
Проблема в том, что я не вижу способа сравнить до и после, изменился ли статус или нет .
Другой подход, программный c подсчет версий, будет выглядеть примерно так ...
version = Column(Interger(), nullable=False)
__mapper_args__ = {
'version_id_col':version,
'version_id_generator': False
}
Тогда в коде ...
my_obj = Object(version=1)
session.add(my_obj)
my_obj.version = my_obj.version + 1
session.commit()
Этот метод требует, чтобы я вручную установил версию, которая не является привлекательной, но позволит мне иметь свободу обновлять версию, когда я захочу.
Есть ли более простой способ добавить условия для обновления номера версии ?
Обновление: мне кажется, я смешивал две разные концепции. Похоже, что сопоставление аргументов не работает при наличии версии с поддержкой версий, которая создает нужные мне таблицы _history.