[英]SQLAlchemy force Left Join
我有一點問題。 我有兩個SQL表(ip和客戶端)綁定第三個(ip_client)。 我沒有使用SQLAlchemy附帶的多對多關系,因為我的一些查詢發生了復雜的過濾。
一切都很好,除了一個愚蠢的用例。 我想列出沒有客戶端的所有IP,沒有外連接我不能這樣做。
外連接需要幾秒鍾,其中使用左連接的相同查詢是即時的。 但是無法避免SQL Alchemy創建的INNER JOIN。 我嘗試了所有的關系,並移動我的外鍵,但它保持INNER JOIN。
基於同樣的問題,每當我嘗試使用顯示客戶端數量的列列出所有ips時,查詢將不會返回具有0個客戶端的ips(INNER JOIN的自然行為)。
有沒有辦法強迫它?
順便說一下這是我的查詢:
query = (session.query(Ip, func.count(Client.id))
.join(ClientIp, ClientIp.ip_id==Ip.id)
.join(Client, Client.id==ClientIp.client_id)
.group_by(Ip.id))
在查詢創建或連接函數中是否存在強制LEFT JOIN的技巧?
只需在適當的地方使用outerjoin
而不是join
:
query = (session.query(Ip, func.count(Client.id)).
outerjoin(ClientIp, ClientIp.ip_id==Ip.id).
outerjoin(Client, Client.id==ClientIp.client_id).
group_by(Ip.id)
)
OUTER JOIN
性能是另一個問題,在ForeignKey
列上有indices
可能會有很大的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.