[英]Getting distinct count of column on a SQLAlchemy query object?
給定一個 sqlalchemy.orm.query.Query 對象,是否可以計算其上的不同列? 我問是因為.count()
由於連接條件而返回欺騙。
例如:
from sqlalchemy import func, distinct
channels = db.session.query(Channel).join(ChannelUsers).filter(
ChannelUsers.user_id == USER_ID,
Message.channel_id.isnot(None)
).outerjoin(Message)
# this gives us a number with duplicate channels
# and .count() does not take extra parameters to target on column
channels.count()
...
# later on I need to access all these channels via channels.all()
為了獲得不同的通道數,我可以通過再次復制上面的過濾條件並查詢不同的列來做到這一點。 像這樣的東西
distinct_count = db.session.query(
func.count(distinct(Channel.id))
).join(ChannelUsers).filter(
ChannelUsers.user_id == USER_ID,
Message.channel_id.isnot(None)
).outerjoin(Message)
但這並不理想,因為我需要在獲得不同計數后訪問部分或所有頻道。
發現this尋找自己的答案。 經過更多研究,我能夠使用 load_only 和 distinct 的組合獲得預期結果,以便僅計算 ID 字段的不同值。 為簡單起見,我們假設 Channel 有一個名為 id 的唯一字段。
distinct_count = channels.options(load_only(Channel.id)).distinct().count()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.