来自Django ORM后,我是SQLAlchemy的新手。我试图创建一个简单的嵌套集模式&我想做父查找。我会在Django ORM中做到这一点:
Page.objects.get(slug="currentlevel",parent__slug="secondlevel",parent__parent__slug="firstlevel")
这将自动查询每个父项的数据库,返回相关的页面行。
在SQLAlchemy中,我能想到的最好的是:
session.query(Page).join(Page.parent, aliased=True).filter_by(slug="child")
所以我可以查询直接的父项,但是如何在一个查询中继续链?动态(如果可能)(任意数量的水平)
请记住我是SQLAlchemy的新手,来自相对受保护的Django ORM。我确定SQLAchemy文档中有相关信息,但我已经通读了它,似乎无法找到它。
感谢您的帮助。
答案 0 :(得分:0)
您是对的,Self-Referential Query Strategies
下sqlalchemy文档中的所有信息。在这种情况下,您的初始查询将如下所示:
from sqlalchemy.orm import aliased
page1 = aliased(Page)
page2 = aliased(Page)
qry = (session
.query(Page).filter(Page.slug=='currentlevel')
.join(page1, Page.parent).filter(page1.slug=="secondlevel")
.join(page2, page1.parent).filter(page2.slug=="firstlevel")
)
或者,使用aliased
(带from_joinpoint
)个参数,稍微短一些:
qry = (session
.query(Page).filter(Page.slug=='currentlevel')
.join(Page.parent, aliased=True).filter(Page.slug=="secondlevel")
.join(Page.parent, aliased=True, from_joinpoint=True).filter(Page.slug=="firstlevel")
)