我有这个组的查询:
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)