sqlalchemy и postgres: боковое выражение без предложения from - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь сделать что-то вроде этого, но с sqlalchemy:

select t1.a, t2.x, l1.a_x, l2.a_x_y
  from t1
  join t2 on t1.id = t2.id
  join lateral (select t1.a + t2.x as a_x) l1 on true
  join lateral (select l1.a_x + t2.y as a_x_y) l2 on true

Проблема в том, что sqlalchemy сначала автокоррелирует все таблицы, используемые в подзапросе, а затем, после использования correlate_except, поднимает FROM clause expected исключение.

ОБНОВЛЕНИЕ : вот упрощенная демонстрация: https://pastebin.com/XrkW2cMT sa.__version__: 1.3.17

Лучше всего использовать некоторую имитацию FROM, что-то вроде этого:

select([]).select_from(text("(select 1) as X")).lateral("l1")
lateral (select a + b as c from (select 1) as X) l1

Это работает, но выглядит некрасиво, и меня беспокоят возможные проблемы с производительностью в некоторых странных крайних случаях.

Есть ли лучше , почище способ?

...