与此问题相关:SQLAlchemy logging of changes with date and user
我正在使用"recipe" for versioning changes automatically的修改版本。我认为它已经能够处理某些形式的关系(虽然不确定),但是我无法处理在单独的表中存在多对多关系的情况。
这是一个简单的例子:
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
表执行类似的操作,而不使用声明格式。有also notes in the documentation saying that it's not a good idea using a table that's mapped to a class所以我试图避免使用声明对象来实现这种关系。