在SQLAlchemy查询对象上获取不同的列数?

时间:2016-10-27 19:19:47

标签: python sqlalchemy

给定sqlalchemy.orm.query.Query对象,是否可以计算其上的不同列?我问,因为.count()由于连接条件而返回dupes。

例如:

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)

但这并不理想,因为我需要在获得明确的计数后访问部分或全部频道。

0 个答案:

没有答案