我需要使用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')])
那里没有成功。 有什么想法吗?
答案 0 :(得分:1)
就像我在评论中说的那样,我对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