3

私はクラスRevisionRevision持っており、次の定義があります:

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.
4

1 に答える 1

4

あなたが欲しいものは隣接リストと呼ばれています。SQLAlchemyのexamplesディレクトリに例があります。重要な部分はremote_side、backrefの引数です。

ancestorId = db.Column(db.Unicode, db.ForeignKey(id))
successors = db.relationship("Revision",
                             backref=db.backref("ancestor", remote_side=id),
                             lazy="dynamic")
于 2013-02-24T14:51:34.727 に答える