Python 在where子句-SQLalchemy中为case语句生成别名
我需要使用SQLAlchemy在SQL查询中创建一个计算列。 我希望得到的查询如下所示:Python 在where子句-SQLalchemy中为case语句生成别名,python,sql,sqlalchemy,Python,Sql,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 query = select(['*', cas
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
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
现在,我用SQLAlchemy这样做:
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
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
但是,我没有设法添加另一个别名函数,以使我添加的计算列像我希望的那样被称为kid。SQLAlchemy为其生成自己的别名
我试过:
query = select(['*', case([(alias(Column('age').op('<')(18), name='kid'), 1)], else_=0)])
以及:
没有成功。
有什么想法吗?就像我在评论中说的,我不熟悉sqlalchemy。但也许这会帮助你:
query = select(['*', case([(Column('age').op('<')(18), 1)], else_=0).label("kid")])
query.select_from(alias(select([*]), name='dataset'))
但我真的不确定这里的语法是否正确。也可以在这里查看:Case expression@jarlh请详细说明Case expression返回的值,就像您使用它一样。case语句用于有条件地执行代码,例如在存储过程中,并且不返回任何值。expression语句这如何帮助我为该列添加别名?我不喜欢sqlalchemy,但也许您可以为该列使用label:alias在From子句中使用,例如,为我所要查找的表添加别名。