我有一个类Revision
,Revision
有如下定义:
class Revision(db.Model):
id = db.Column(db.Unicode, primary_key=True)
text = db.Column(db.Unicode)
此外,每个 Revision
可以有一个祖先,就像与另一个 Revision
的关系一样。每个 Revision
还应该跟踪任何后继者,即以它为祖先的 Revision
。我尝试了以下两种方法:
ancestorId = db.Column(db.Unicode, db.ForeignKey("revision.id"))
successors = db.relationship("Revision", backref="ancestor", lazy="dynamic")
扔了:
sqlalchemy.exc.ArgumentError: Revision.successors and back-reference Revision.ancestor are both of the same direction <symbol 'ONETOMANY>. Did you mean to set remote_side on the many-to-one side ?
和
successors = db.relationship("Revision", backref="ancestor", lazy="dynamic")
扔了:
sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/child tables on relationship Revision.successors. Specify a 'primaryjoin' expression. If 'secondary' is present, 'secondaryjoin' is needed as well.
最佳答案
你要的叫adjacency list . SQLAlchemy 有一个 example在其示例目录中。重要的部分是 backref 的 remote_side
参数:
ancestorId = db.Column(db.Unicode, db.ForeignKey(id))
successors = db.relationship("Revision",
backref=db.backref("ancestor", remote_side=id),
lazy="dynamic")
关于python - 将类与其自身相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044777/