簡體   English   中英

在 SQLAlchemy 查詢對象上獲取不同的列數?

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

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