sqlalchemy在多个表上使用group by左连接



我有这个组的查询:

dis_data = db.session.query(Dis, DisUser, DTypes, DisUser.did,
func.count(DisUser.did).label('dis_count')).
filter(Dis.id == DisUser.did, Dis.tid==DTypes.id).
group_by(DisUser.did).all()

但是,它只返回用户从Dis中选择的项。DisUser和User之间保持这种多对多关系。但我希望所有的项都在Dis中。如何将其更改为左外连接?

我试过这个,给出错误:

_data = db.session.query(Dis, DTypes, DisUser.did, 
func.count(DisUser.did).label('dis_count')).
select_from(Dis, DTypes).outerjoin(DisUser).
filter(Dis.id == DisUser.did, Dis.tid==DTypes.id, 
DTypes.id == dtype).group_by(DisUser.did).all()

错误:

sqlalchemy.exc。InvalidRequestError:不知道如何在0x7f88d80cd520连接到<Mapper;DisUser>。请使用。select_from()方法建立一个明确的左侧,以及提供一个显式ON子句,如果还没有出现,以帮助解决歧义。

我用这个解决了查询,关键是在groupby中我应该使用左表中的一列:

_data = db.session.query(Dis,DTypes,
func.count(DisUser.did).label('dis_count'))
.outerjoin(DisUser, Dis.id==DisUser.did)
.filter(DTypes.id == Dis.tid, DTypes.id == dtype)
.group_by(Dis.id)

相关内容

  • 没有找到相关文章

最新更新