与此问题相关:SQLAlchemy logging of changes with date and user
我正在使用“配方”的修改版本来自动更改版本。我认为它已经能够处理某些形式的关系(虽然不确定),但我无法处理单独表中存在多对多关系的情况。
这是一个有问题的简单示例:
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)
我生成数据库中的表时,可以看到只有5个表:user、group、user_to_group、user_history和group_history 没有user_to_group_history。
“版本控制”通过继承添加到声明性对象中Versioned
,但没有办法(我可以看到)对user_to_group
不使用声明性格式的表做类似的事情。文档中也有注释说使用映射到类的表不是一个好主意,所以我试图避免对关系使用声明性对象。