在此表模式中:
class Location(db.Model):
id = db.Column(db.String(255), primary_key=True)
parent_id = db.Column(db.String(255), db.ForeignKey('location.id'), nullable=True)
type = db.Column(db.String(255))
name = db.Column(db.String(255))
options = db.Column(db.Text, nullable=True)
我有个家长,假设这张桌子:
> select * from location;
+--------------------------------------+--------------------------------------+---------+-----------+---------+
| id | parent_id | type | name | options |
+--------------------------------------+--------------------------------------+---------+-----------+---------+
| 8821da60-e7d2-11e1-951e-ae16bc2b7368 | 88227a60-e7d2-11e1-951e-ae16bc2b7368 | city | sengkang | NULL |
| 88227a60-e7d2-11e1-951e-ae16bc2b7368 | NULL | country | singapore | NULL |
+--------------------------------------+--------------------------------------+---------+-----------+---------+
父对象是country对象,名为新加坡。可以有更多嵌套对象,它们是增康的子对象,就像增康是新加坡的子对象一样。
因此,一个单一的等级链可能看起来像一个-> b ->生康->新加坡。
因此,->意味着
如何获得具有父对象为新加坡的所有位置对象,包括父对象(新加坡)?(请用SQLAlchemy )。谢谢!
发布于 2012-08-17 00:16:37
SA文档:Query.cte
我不得不说,新的CTE (从0.76开始)是相当好的,比我必须返工这的旧方式好。
总之,你觉得你在找这样的东西.
included_parts = session.query(Location).\
filter(Location.name=='singapore').\
cte(name='included_parts', recursive=True)
incl_alias = aliased(included_parts, name="pr")
parts_alias = aliased(Location, name='p')
included_parts = included_parts.union_all(
session.query(parts_alias).filter(parts_alias.parent_id==incl_alias.c.id)
)
q = session.query(included_parts).all()
https://stackoverflow.com/questions/11994092
复制相似问题