создание псевдонима для оператора case в предложении where - SQLalchemy - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно создать вычисляемый столбец в моем запросе SQL с помощью 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

Теперь мне удалось сделать это с помощью 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')])

Успехов там нет.Есть идеи?

1 Ответ

0 голосов
/ 24 октября 2018

Как я уже сказал в комментарии, я не знаком с sqlalchemy.Но, возможно, это поможет вам:

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

Но я действительно не уверен, что синтаксис здесь.Возможно также посмотрите здесь: Использование псевдонима () для «выбрать как» в SQLAlchemy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...