Flask 查询家长&;在SQLAlchemy中在同一张桌子上自我参照的祖父母

Flask 查询家长&;在SQLAlchemy中在同一张桌子上自我参照的祖父母,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,我有一张名为“坚定”的桌子: class Firm(Base): __tablename__ = "firm" id = Column(Integer, primary_key=True) name = Column(Unicode(255)) parent_id = Column(Integer, ForeignKey('firm.id')) level = Column(Integer) parent = relationship("Firm"

我有一张名为“坚定”的桌子:

class Firm(Base):
    __tablename__ = "firm"
    id = Column(Integer, primary_key=True)
    name = Column(Unicode(255))
    parent_id = Column(Integer, ForeignKey('firm.id'))
    level = Column(Integer)
    parent = relationship("Firm", remote_side=[id])
id |名称|父级| id |级别

1 |名称1 | 0 | 1

2 |名称2 | 0 | 1

3 |名称3 | 1 | 2

4 |名称4 | 1 | 2

5 |名称5 | 3 | 3

6 |名称5 | 4 | 3

我想:

1) 获取祖父母姓名,给定孙辈id的父母姓名。我使用了这个,但它不起作用。我在获取结果时遇到了DettachedInstance错误

ret = db_session.query(Firm).filter_by(id=6).options(joinedload('parent')).options(joinedload('parent')).first() # grandparent id = 1
print ret.parent.parent.name # grandparent name is printed out here => OK
db_session.expunge_all()
return render_template('firm.html', firm_tree=ret);

# here is code in html file
<p>{{ firm_tree.parent.name }}</p> <!-- ==>> OK -->
<p>{{ firm_tree.parent.parent.name }}</p> <!-- ==>> DetachedInstance error -->
ret=db\u session.query(Firm).筛选依据(id=6).选项(joinedload('parent')).选项(joinedload('parent')).first()#祖父母id=1
print ret.parent.parent.name#祖父母的名字在这里打印出来=>OK
db_session.expunge_all()
返回渲染模板('firm.html',firm\u tree=ret);
#下面是html文件中的代码
{{firm_tree.parent.name}}

{{firm_tree.parent.parent.name}

2) 获取与给定祖父母id和给定父母id(此父母是祖父母的子女)匹配的所有记录(级别=3)

3) 获取与给定祖父母id匹配的所有记录(级别=3)&无需关心父id

我对2)和3)一无所知。 感谢您的帮助