具有声明属性的SQLAlchemy邻接列表关系

2024-04-20 07:12:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由不同类型的子级继承的顶级模型声明

class HasId(object):

    @declared_attr
    def id(cls):
        return Column('id', Integer, Sequence('test_id_seq'), primary_key=True)
    ...
    @declared_attr
        def triggered_by_id(cls):
            return Column(Integer, ForeignKey('tests.id'), nullable=True)

    @declared_attr
        def triggered(cls):
            return relationship('TestParent',
                                foreign_keys='TestParent.triggered_by_id',
                                lazy='joined',
                                cascade='save-update, merge, delete, delete-orphan',
                                backref=backref('triggered_by', remote_side=[id])
                                )


class TestParent(HasId, Model):
    __tablename__ = 'tests'

    discriminator = Column(String(50))

    __mapper_args__ = {'polymorphic_on': discriminator}


class FooTest(TestParent):
    __tablename__ = 'footests'
    __mapper_args__ = {'polymorphic_identity': 'footests'}
    id = Column(Integer, ForeignKey('tests.id'), primary_key=True)

    bar = Column(Boolean)
    ...

当IO试图构建这个数据库时,我得到了一个错误,这是由于我在triggered_by关系上定义了backrefremote_side。在

完整的错误是

^{pr2}$

Tags: idtruebyreturndeftestscolumninteger