[英]SQLAlchemy Union Parenthesis Issue
我需要生成類似於以下內容的查詢:
(select * from ... where .. and .. order by .. limit ..)
union all
(select * from ... where .. and .. order by .. limit ..)
order by ..
使用SQLAlchemy,我創建了兩個查詢對象,如下所示:
q1 = Session.query(..).filter(..).filter(..).order_by(..).limit(..)
q2 = Session.query(..).filter(..).filter(..).order_by(..).limit(..)
q = q1.union_all(q2).order_by(..).all()
但是它不起作用,因為SQLAlchemy生成查詢:q1和q2不在括號內,它會產生錯誤。
如何在q1 q2 union的括號內獲取這些語句以產生上述表達式查詢?
您需要創建子查詢,然后從這些子查詢中進行選擇:
from sqlalchemy import union_all
q1 = Session.query(..).filter(..).filter(..).order_by(..).limit(..).subquery()
q2 = Session.query(..).filter(..).filter(..).order_by(..).limit(..).subquery()
q = Session.query(..).select_entity_from(union_all(q1.select(), q2.select()).order_by(..).all()
.subquery()
方法返回一個Alias對象 ,該對象不直接支持union_all
查詢。 因此,我們需要構建一個select_entity_from()
構造 ,而不是傳入sqlalchemy.sql.expression.union_all()
函數結果,因此您仍然可以將結果映射到正確的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.