Python 不带连接的from子句中的SQLAlchemy子查询

Python 不带连接的from子句中的SQLAlchemy子查询,python,sqlalchemy,Python,Sqlalchemy,我需要一点帮助。 我有以下查询,我很好奇如何用sqlalchemy.orm表示它。目前我正在通过session.execute执行它。这对我来说并不重要,但我只是好奇。我实际上不知道的是如何在不进行任何连接的情况下将子查询放入FROM子句(嵌套视图) select g_o.group_ from ( select distinct regexp_split_to_table(g.group_name, E',') group_ from ( se

我需要一点帮助。 我有以下查询,我很好奇如何用sqlalchemy.orm表示它。目前我正在通过session.execute执行它。这对我来说并不重要,但我只是好奇。我实际上不知道的是如何在不进行任何连接的情况下将子查询放入FROM子句(嵌套视图)

select g_o.group_ from (
    select  distinct regexp_split_to_table(g.group_name, E',') group_
        from (
            select array_to_string(groups, ',') group_name
            from company
            where status='active'
            and   array_to_string(groups, ',') like :term
            limit :limit
        ) g
    ) g_o
where g_o.group_ like :term
order by 1
limit :limit
由于速度问题,我需要这个子查询功能-在最内部的查询函数regexp\u split\u to\u表中没有限制开始解析所有数据,并且仅在此之后才进行限制。但是我的桌子很大,我买不起


如果有什么不太清楚的,请问,我会尽力的)

我想这是PostgreSQL

要创建子查询,请使用方法。结果对象可以像
对象一样使用。以下是您的查询在SQLAlchemy中的外观:

subq1=session.query(
函数数组到字符串(Company.groups,,).label('group\u name'))
).过滤器(
(Company.status==“活动”)&
(函数数组到字符串(Company.groups,,).like(term))
).limit(limit).subquery()
subq2=session.query(
func.regexp_拆分为_表(subq1.c.group_名称,,)
.distinct()
.label('组')
).subquery()
q=session.query(subq2.c.group)\
过滤器(子q2.c.group.like(术语))\
订购人(第2.c.子组)\
限额
但是,您可以通过使用
unnest
函数避免一个子查询,而不是使用
arrayt\u to_string
将数组转换为字符串,然后使用
regexp\u split\u to_table
将其拆分:

subq=session.query(
函数unnest(公司组)。标签('group')
).过滤器(
(Company.status==“活动”)&
(函数数组到字符串(Company.groups,,).like(term))
).limit(limit).subquery()
q=session.query(subq.c.group.distinct())\
过滤器(子q.c.group.like(术语))\
订购人(子Q.c.组)\
限额

一个没有明确提到的重要部分(但可以从示例中推断):您需要明确使用
subq1.c
而不是
subq1
将查询用作子查询表,否则由于缺少属性,查询将无法编译。