SQLAlchemy上的递归查询

时间:2018-04-20 07:30:19

标签: python flask sqlalchemy

我在尝试使用SQLAlchemy进行递归查询时遇到问题。我搜索并重新搜索SO和我找到的每个网站,但我无法找到我需要的东西。

我想要的是什么:

我有两个关系表(在这种情况下不需要第三个):

enter image description here

我想获取容器包含的所有项目。第一个容器可以有子容器(字段可以为null)但是如果容器有子容器,我需要在table1上再次子查询,将subcontainerid作为容器。

我在Oracle上有什么:

SELECT DISTINCT table1.id,
                table1.containerid,
                table1.subcontainerid,
                table1.iditem
FROM table1
START WITH containerid IN (
    SELECT table2.id FROM table2 WHERE table2.id = X
)
CONNECT BY PRIOR table1.subcontainerid = containerid

我在SQLAlchemy上尝试了什么:

我得到了许多像数据库错误,例如'执行递归WITH查询时检测到循环',但是我最接近的是,在那次尝试中:

table1CTE = table1.query.with_entities(table1.id).\
    filter(table1.id == 19076).\
    cte(name='table1', recursive=True)

a = aliased(table1CTE, name="sb")
b = aliased(table2, name="bi")

joined = table2.query.with_entities(table2.containerid).\
    filter(a.c.id == b.subcontainerid)

cte = a.union(joined)

table2.query.with_entities(table2.id, table2.containerid, table2.iditem).\
    select_entity_from(cte).\
    all()

但这会返回table1中的所有字段......所以这不是我需要的。

我知道这个问题有点难以理解,所以如果你需要一些东西让它更容易,请告诉我。

0 个答案:

没有答案