簡體   English   中英

具有聲明屬性的SQLAlchemy鄰接表關系

[英]SQLAlchemy adjacency list relationship with declared attributes

我有一個由不同類型的子代繼承的頂級模型聲明

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嘗試構建此數據庫時,我收到一個錯誤,該錯誤是由於我如何在backref關系上定義backrefremote_side triggered_by

完整的錯誤是

ArgumentError: Column-based expression object expected for argument 'remote_side'; got: '<built-in function id>', type <type 'builtin_function_or_method'>

解決方案是將backref定義從

backref('triggered', remote_side=[id])

backref('triggered', remote_side='TestParent.id')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM