SQLAlchemy别名没有别名?

时间:2013-05-07 03:48:43

标签: python sql database sqlalchemy

我有以下sqlalchemy代码:

x = bbc.alias().c
w = bbc.alias().c
select([func.distinct(x.region)]).where(
    select([func.sum(w.population)]).where((w.region == x.region)) > 100000000
)

我希望它能产生这个SQL:

SELECT DISTINCT(x.region)
FROM bbc x
WHERE 100000000 < (
    SELECT SUM(w.population)
    from bbc w
    WHERE w.region = x.region
)

但它给了我这个:

SELECT distinct(bbc_1.region) AS distinct_1 
FROM bbc AS bbc_1 
WHERE 1

不知何故,WHERE子句正在崩溃,但对于我的生活,我看不出原因。我是否对别名做错了什么?

1 个答案:

答案 0 :(得分:1)

如邮件列表中所述,select()构造是FromClause,直到您在其上调用as_scalar(),将其转换为适合SQL表达式的ColumnElement:< / p>

x = bbc.alias().c
w = bbc.alias().c
select([func.distinct(x.region)]).where(
    select([func.sum(w.population)]).where(w.region == x.region).as_scalar() > 100000000
)