gpt4 book ai didi

python - Flask-SqlAlchemy 邻接列表关系 backfref 意外错误

转载 作者:太空狗 更新时间:2023-10-30 00:03:28 24 4
gpt4 key购买 nike

我正在做一个小项目,我在其中使用 Flask-SqlAlchemy 来实现邻接表关系。我有一个模型(表),它有一个 db.Relationship() 的属性,它引用同一个表的 parent_id 列。

以下是代码(部分):

class Node(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(80))
folder_id = db.Column(db.Integer, db.ForeignKey('node.id'))

children = db.relationship('Node', backref = 'parent', remote_side=[id])

当我尝试使用 Python Shell 中子文件夹的 backref 属性将子文件夹添加到父文件夹时,例如以下代码(部分):

parentNode = Node('title1')
db.session.add(parent)
db.session.commit()

childNode = Node('title2')
child.parent = parentNode

但是,在 Python shell 中尝试之后,我得到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>

TypeError: Incompatible collection type: Node is not list-like

我已阅读 SqlAlchemy 文档以找出解决方案,它们对邻接列表关系具有相似的语法。它有一个类似的示例,但没有显示如何像我在 shell 中尝试的那样将父节点添加到子节点。将父节点添加到子节点的 backref 属性中的原因是它适用于一对多关系。任何帮助查找代码问题的帮助将不胜感激......请随时提出替代解决方案。

谢谢!

最佳答案

您以错误的方式配置关系。请执行此操作:

from sqlalchemy.orm import backref
class Node(db.Model):
# ...
children = db.relationship('Node', backref=backref('parent', remote_side=[id]))

class Node(db.Model):
# ...
parent = db.relationship("Node", backref='children', remote_side=[id])

关于python - Flask-SqlAlchemy 邻接列表关系 backfref 意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com