この質問に関連:日付とユーザーによる変更の SQLAlchemy ログ
バージョン管理の変更を自動的に行うために、「レシピ」の修正バージョンを使用しています。すでにいくつかの形式の関係を処理できると思いますが (確かではありません)、別のテーブルに多対多の関係がある場合は処理できません。
問題となる簡単な例を次に示します。
from history_meta import (Versioned, versioned_session)
Base = declarative_base()
user_to_group = Table('user_to_group', Base.metadata,
Column('user_login', String(60), ForeignKey('user.login')),
Column('group_name', String(100), ForeignKey('group.name'))
)
class User(Versioned, Base):
__tablename__ = 'user'
login = Column(String(60), primary_key=True, nullable=False)
password = Column(BINARY(20), nullable=False)
class Group(Versioned, Base):
__tablename__ = 'group'
name = Column(String(100), primary_key=True, nullable=False)
description = Column(String(100), nullable=True)
users = relationship(User, secondary=user_to_group, backref='groups')
を使用してデータベースにテーブルを生成すると、Base.metadata.create_all(engine)
user、group、user_to_group、user_history、および group_history の 5 つのテーブルしかないことがわかります。user_to_group_history はありません。
「バージョン管理」は の継承を通じて宣言オブジェクトに追加されますが、宣言形式を使用していないテーブルでVersioned
同様のことを行う方法はありません (私が見ることができます) 。user_to_group
ドキュメントには、クラスにマップされたテーブルを使用するのは良い考えではないというメモもあるため、関係に宣言型オブジェクトを使用しないようにしています。