1

この質問に関連:日付とユーザーによる変更の 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ドキュメントには、クラスにマップされたテーブルを使用するのは良い考えではないというメモもあるため、関係に宣言型オブジェクトを使用しないようにしています。

4

0 に答える 0