SqlAlchemy 将 SELECT 子查询放在 FROM 子句中而不是 SELECT

SqlAlchemy puts SELECT Subquery in FROM clause instead of SELECT

我的目标SQL如下,有效,

SELECT a.agreement_group_id, 
       (select id from agreement_t where agreement_group_id = a.agreement_group_id and 
                                         active = 'Y'),
       ...
FROM ets.agreement_t a
WHERE requester_uniqueidentifier = '0010079170'
GROUP BY a.agreement_group_id 
ORDER BY a.agreement_group_id

但 SqlAlchemy 正在生成以下内容——并抱怨我在 GROUP BY 中没有 anon_1,因为它在 FROM 中放置了子 select,

SELECT agreement_t_1.agreement_group_id AS agreement_t_1_agreement_group_id, 
       anon_1.id AS anon_1_id, 
       ...
FROM ets.agreement_t AS agreement_t_1, 
     (SELECT ets.agreement_t.id AS id   
      FROM ets.agreement_t, ets.agreement_t AS agreement_t_1
      WHERE ets.agreement_t.agreement_group_id = agreement_t_1.agreement_group_id AND  
            ets.agreement_t.active = 'Y') AS anon_1
WHERE agreement_t_1.requester_uniqueidentifier = '0010079170' 
GROUP BY agreement_t_1.agreement_group_id, anon_1.id 
ORDER BY agreement_t_1.agreement_group_id

Python SqlAlchemy 代码:

agreement = aliased(AgreementT)
subqueryActive = db_session.query(AgreementT.id).filter(
                    (AgreementT.agreement_group_id == agreement.agreement_group_id), 
                    (AgreementT.active == 'Y')
                  ).subquery()

result = (db_session.query(
        agreement.agreement_group_id,
        subqueryActive,
        ...
        .filter(*filters)
        .group_by(agreement.agreement_group_id)
        .order_by(agreement.agreement_group_id)
        .all())

我不需要任何其他连接。如您所见,子查询 subqueryActive 已经引用了主查询中使用的别名 agreement。那么,为什么 Sub-Select 没有正确放置在 SELECT 中,而是放在 FROM 中,并出现以下错误?

psycopg2.errors.GroupingError: column "anon_1.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...ent_group_id AS agreement_t_1_agreement_group_id, anon_1.id ...
                                                         ^

如果子Select应该是SELECT的一部分,我们就不能用.subquery(),我们需要用.label()代替。

此处示例:

感谢@Ilja Everilä 的提示