首页 > 解决方案 > 在 where 子句中为 case 语句创建别名 - 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() 函数来使我添加的计算列像我想要的那样被称为“孩子”。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')])

那里没有成功。有任何想法吗?

标签: pythonsqlsqlalchemy

解决方案


就像我在评论中说的那样,我不熟悉 sqlalchemy。但也许这会帮助你:

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

但我真的不确定语法是否在这里。也许也看这里:Using alias() for 'select as' in SQLAlchemy


推荐阅读