簡體   English   中英

在where子句中為case語句創建別名-SQLalchemy

[英]making alias for case statement in the where clause - SQLalchemy

我需要使用SQLAlchemy在我的SQL查詢中創建一個計算列。 我想獲取的查詢將如下所示:

SELECT *, CASE WHEN (age < 18) THEN 1 ELSE 0 END AS kid 
FROM (SELECT TEST_TABLE.index AS index, TEST_TABLE.age AS age, TEST_TABLE.letter AS letter 
FROM TEST_TABLE) AS dataset

現在,我設法使用SQLAlchemy做到了這一點:

query = select(['*', case([(Column('age').op('<')(18), 1)], else_=0)])
query.select_from(alias(select([*]), name='dataset'))   # I actually pass different params here, but this is an example

但是我沒有設法放置另一個alias()函數來使我添加的計算列像我想要的那樣被稱為“ kid”。 SQLAlchemy會為其生成自己的別名。

我試過了:

query = select(['*', case([(alias(Column('age').op('<')(18), name='kid'), 1)], else_=0)])

和:

query = select(['*', alias(case([(Column('age').op('<')(18), 1)], else_=0), name='kid')])

那里沒有成功。 有任何想法嗎?

就像我在評論中說的,我對sqlalchemy不熟悉。 但這可能會幫助您:

query = select(['*', case([(Column('age').op('<')(18), 1)], else_=0).label("kid")])
query.select_from(alias(select([*]), name='dataset')) 

但是我真的不確定語法是否正確。 也許還要看一下: 在SQLAlchemy中將alias()用作'select as'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM