给定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)
但这并不理想,因为我需要在获得明确的计数后访问部分或全部频道。