簡體   English   中英

SQLAlchemy Union括號問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM