SQLAlchemy中同一个表上的一对多关系

时间:2016-01-13 19:46:29

标签: python sql sqlalchemy

我在GitHub上建模存储库。每个Repo可以有一组叉子,其中Repo将是其中的一个。

我的部分模型文件如下所示:

class Repo(Base):
    __tablename__ = "repos"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, unique=True)
    parent_id = db.Column(Integer,db.ForeignKey('repos.id'))
    parent = db.relationship("Repo")

我无法理解如何正确地建立这种关系。

2 个答案:

答案 0 :(得分:2)

您可以使用remote_side指令

class Repo(Base):
    __tablename__ = "repos"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, unique=True)
    parent_id = db.Column(Integer,db.ForeignKey('repos.id'))
    forks = relationship("Repo",
                backref=backref('parent', remote_side=[id])
            )

请参阅Adjacency List Relationships文档和this answer

答案 1 :(得分:1)

也许这样的事情可行吗?

class Repo(Base):
    __tablename__ = "repos"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, unique=True)


class Fork(Repo):
    __tablename__ = "forks"
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(Integer,db.ForeignKey('repos.id'))
    parent = db.relationship("Repo")

继承Repo类,以便Fork共享与Repo相同的所有属性。另外,我们在Fork中添加了一个关系,它设置它不是一个根存储库,并且与一些以前分叉的repo相关联