2013-05-07 66 views
2

我有以下的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

,一個select()結構是FromClause,直到調用as_scalar()它,把它變成一個ColumnElement適用於SQL表達式:

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 
)