[英]SQLAlchemy func.count with filter
我正在使用一個像這樣分頁的框架:
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()
...
我想覆蓋get_count_query方法以使用我自己的查詢,因為我正在過濾一些結果而get_count_query只返回表中的所有元素。 查詢是動態創建的,例如,一個查詢可以是:
Asset.query.join(StatusLabel).filter(StatusLabel.status == 'Deployable', or_(
Asset.assigned_to.isnot(None)),
Asset.deleted_at.is_(None))
我可以使用query.count()
輕松計算此查詢中的元素:
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 q.count()
但是一旦它到達.scalar()方法就會失敗(我無法刪除此方法)。 所以問題是:如何將func.count('*')
應用於現有查詢?
我可以從查詢中檢索過濾器並將它們應用於func.count('*')
查詢嗎?
你可以使用select_from
與join
和filter
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())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.