在SqlAlchemy中使用关联表的一对一自引用关系

时间:2015-07-20 23:07:21

标签: python sqlalchemy relationships

所以我在Topic模型之间有一个父子关系,其关系由此类代表:

class ParentChildRelation(db.Model):
    __tablename__ = 'parent_child_relation'

    id = db.Column(db.Integer, primary_key=True)
    child_topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'), nullable=False)
    parent_topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'), nullable=False)

主题定义如下:

class Topic(db.Model):
    __tablename__ = 'topic'

    id = db.Column(db.Integer, primary_key=True)

    parent = db.relationship(
        'Topic',
        secondary='parent_child_relation',
        primaryjoin='Topic.id == ParentChildRelation.child_topic_id',
        secondaryjoin='Topic.id == ParentChildRelation.parent_topic_id'
    )

我希望parent暂时成为一对一关系(我稍后可能会更改),但它会以{{ 1}}。是否有一种简单的方法可以说明InstrumentedList应该是一对一的关系,以便它直接链接到parent模型而不是Topic

1 个答案:

答案 0 :(得分:0)

事实证明我之前找到了正确的答案,但我一定有错字:/。添加uselist = False就可以了。

parent = db.relationship(
    'Topic',
    secondary='parent_child_relation',
    primaryjoin='Topic.id == ParentChildRelation.child_topic_id',
    secondaryjoin='Topic.id == ParentChildRelation.parent_topic_id',
    uselist=False
)