我们推荐使用sqlalchemy,而不是flask-sqlalchemy
复杂查询还是要用select拼接,不能用query拼接
(因为query生成的sql语句中会把更改字段名,例如如select nick as user_nick...,union后就只能使用user.user_nick访问了,原本应该是用user.nick)
#获取我的所有粉丝,主要是可以抽成的就算粉丝(不包括自己),返回一个list
# size为0返回全部
def get_fans(self,start=0,size=500):
# 200名下级,2万名下下级,耗时0.7s
#直属下级select
select_direct_fans = select([User]).where(and_(User.role==Role.MEMBER.value,User.superior_id==self.id))
#直属下级的ids集合select
select_ids = select([User.id]).where(and_(User.role==Role.MEMBER.value,User.superior_id==self.id))
#下下级select
select_distant = select([User]).where(and_(User.role==Role.MEMBER.value,User.superior_id.in_(select_ids)))
#下级和下下级 联合
un = union_all(select_direct_fans, select_distant).alias('un')
query = db.session.query(un)
return query.limit(size).offset(start).all() if size else query.all()
网友评论