Увеличить версию условно с помощью истории версий sqlalchemy - PullRequest
0 голосов
/ 07 мая 2020

Я бы хотел уменьшить количество записей, создаваемых в таблице истории. Мой текущий поток обновит объект дважды, и я хотел бы отфильтровать первое обновление.

Вот моя версионная таблица ...

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...