sha*_*yet 6 python orm sqlalchemy flask flask-sqlalchemy
我正在开发一个小项目,我正在使用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])
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Python Shell中子项的backref属性将子文件夹添加到父文件夹时,如下面的代码(部分):
parentNode = Node('title1')
db.session.add(parent)
db.session.commit()
childNode = Node('title2')
child.parent = parentNode
Run Code Online (Sandbox Code Playgroud)
但是,我在Python shell中尝试后得到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Incompatible collection type: Node is not list-like
Run Code Online (Sandbox Code Playgroud)
我已经阅读了SqlAlchemy文档来找出解决方案,并且它们具有类似的邻接列表关系语法.它有一个类似的例子,但没有显示如何将父节点添加到子节点,就像我在shell中尝试一样.将父节点添加到子的backref属性的原因是它适用于一对多关系.任何帮助找到代码的问题将不胜感激...请随时建议替代解决方案.
谢谢!
您以错误的方式配置关系.请这样做:
from sqlalchemy.orm import backref
class Node(db.Model):
# ...
children = db.relationship('Node', backref=backref('parent', remote_side=[id]))
Run Code Online (Sandbox Code Playgroud)
要么
class Node(db.Model):
# ...
parent = db.relationship("Node", backref='children', remote_side=[id])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |