LINUX.ORG.RU

Как правильно делать select from_statement из union?

 , ,


0

1

Имею запрос-объединение:

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 из объединения?

★★★★★

Последнее исправление: bvn13 (всего исправлений: 1)

предполагаю, что это из-за использования доп.колонки для сортировки:

expression.literal_column(«1»).label(«order_col»)

bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.