python - 将类与其自身相关联

标签 python sqlalchemy flask flask-sqlalchemy

我有一个类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.

最佳答案

你要的叫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/

相关文章:

python - shutil 和复制文件

python - 关键字不能是表达式 - 在 sqlalchemy 中过滤

connection - sqlalchemy中MapperExtension的 `connection`参数是什么?

python - SQLAlchemy:如何在更新时实现浮点除法?

python - 为 Flask 创建身份验证装饰器的问题

python - uniq、groupby 的用例,无需排序

python - 为 plotly 人物的每个方面添加痕迹

python - 使用值预填充 wtforms 文本字段

python - 这在 random.shuffle 的文档中意味着什么?

mysql - Flask 使用 MySQL 将数据插入数据库