查询下级和下下级

2020-04-12  本文已影响0人  晓函

我们推荐使用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()
上一篇 下一篇

猜你喜欢

热点阅读