使用SQLAlchemy记录版本,包括关系表

时间:2013-04-11 20:32:35

标签: python sqlalchemy

与此问题相关: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所以我试图避免使用声明对象来实现这种关系。

0 个答案:

没有答案