Python SQLAlchemy func.count带筛选器

Python SQLAlchemy func.count带筛选器,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我使用的框架可以进行如下分页: def get_count_query(self): return self.session.query(func.count('*')).select_from(self.model) def paginate(self): ... <irrelevant>... count = self.get_count_query.scalar() ... 使用query.count(),我可以轻松计算此查询中的元素: 但是

我使用的框架可以进行如下分页:

def get_count_query(self):
    return self.session.query(func.count('*')).select_from(self.model)

def paginate(self):
    ... <irrelevant>...
    count = self.get_count_query.scalar()
    ...
使用
query.count()
,我可以轻松计算此查询中的元素:

但是一旦到达.scalar()方法,它就会失败(我不能删除这个方法)。所以问题是:如何将
func.count('*')
应用于现有查询


我可以从查询中检索筛选器并将其应用于
函数计数('*')
查询吗?

您可以使用
中选择
连接
筛选器

def get_count_query(self):
    return self.session.query(func.count('*')).select_from(Asset).join(StatusLabel)\
                                              .filter(StatusLabel.status == 'Deployable', or_(
                                                      Asset.assigned_to.isnot(None),
                                                      Asset.deleted_at.is_(None)))
带子查询

def get_count_query(self):
    q = Asset.query.join(StatusLabel).filter(StatusLabel.status == 'Deployable', or_(
                                             Asset.assigned_to.isnot(None)),
                                             Asset.deleted_at.is_(None))

    return self.session.query(func.count('*')).select_from(q.subquery())

谢谢你的回复,但这对我不起作用。查询是动态构造的,并非总是一样的。非常感谢!这个简单的问题困扰了我好几个小时!:)
def get_count_query(self):
    return self.session.query(func.count('*')).select_from(Asset).join(StatusLabel)\
                                              .filter(StatusLabel.status == 'Deployable', or_(
                                                      Asset.assigned_to.isnot(None),
                                                      Asset.deleted_at.is_(None)))
def get_count_query(self):
    q = Asset.query.join(StatusLabel).filter(StatusLabel.status == 'Deployable', or_(
                                             Asset.assigned_to.isnot(None)),
                                             Asset.deleted_at.is_(None))

    return self.session.query(func.count('*')).select_from(q.subquery())