筛选行后的SqlAlchemy计数



我有以下查询来显示用户的请求。我想统计所有请求,以及那些已经完成的请求(状态为已完成(。我可以得到所有的计数,但它对已完成的计数不返回任何值。

还有更好的方法吗?我在用户模型中有一个requests关系,这可能很有用。

sq_all = db.session.query(Requests.uid,
func.count(Requests.id).label('requests_num'))
.group_by(Requests.uid).subquery()
sq_done = db.session.query(Requests.uid,
func.count(Requests.id).label('done_num'))
.filter(Requests.status == RequestStatusEnum.done)
.group_by(Requests.uid).subquery()
query = db.session.query(Requests, Users, UserInfos, sq_all).
filter(Requests.uid == Users.id, 
UserInfos.uid == Users.id, 
Users.id == sq_all.c.uid)
.outerjoin(sq_done, Users.id == sq_done.c.uid)

我也必须查询sq_done,它被省略了:

query = db.session.query(Requests, Users, UserInfos, sq_all, sq_done).
filter(Requests.uid == Users.id, 
UserInfos.uid == Users.id, 
Users.id == sq_all.c.uid)
.outerjoin(sq_done, Users.id == sq_done.c.uid)

最新更新