Имею запрос-объединение:
s = Connection.getSession()
q1 = s.query(
Price, expression.literal_column("1").label("order_col")
).filter(
and_(
Price.user_id == user_id, # individual
Price.is_enabled == True
)
).order_by(
Price.date_created.desc() # last
)
q2 = s.query(
Price, expression.literal_column("2").label("order_col")
).filter(
and_(
Price.user_id == None, # collective
Price.is_enabled == True
)
).order_by(
Price.date_created.desc() # last
)
q = q1.union_all(q2).order_by(asc("order_col"))
price = s.query(Price).from_statement(q).first()
Последняя строчка приводит к ошибке.
При просмотре sql statement, сгенерированное из q:
SELECT
anon_1.prices_id,
anon_1.prices_date_created,
anon_1.prices_is_enabled,
anon_1.prices_cost_per_mail,
anon_1.prices_user_id,
anon_1.order_col
FROM (
(
SELECT
prices.id AS prices_id,
prices.date_created AS prices_date_created,
prices.is_enabled AS prices_is_enabled,
prices.cost_per_mail AS prices_cost_per_mail,
prices.user_id AS prices_user_id,
1 AS order_col
FROM prices
WHERE
prices.user_id = 6
AND prices.is_enabled = true
ORDER BY prices.date_created DESC
)
UNION ALL (
SELECT
prices.id AS prices_id,
prices.date_created AS prices_date_created,
prices.is_enabled AS prices_is_enabled,
prices.cost_per_mail AS prices_cost_per_mail,
prices.user_id AS prices_user_id,
2 AS order_col
FROM prices
WHERE
prices.user_id IS NULL
AND prices.is_enabled = true
ORDER BY prices.date_created DESC
)
) AS anon_1 ORDER BY anon_1.order_col ASC
можно увидеть, что наложены alias-ы на колонки вида «prices_»+ИмяКолонки. Вангую, что это и мешает. Как этого избежать? Как правильно выбирать объекты ORM из объединения?