sto usando un quadro che fa impaginazione come questo:SQLAlchemy func.count con filtro
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()
...
voglio l'override del metodo get_count_query usare la mia domanda perché sto filtrando alcuni risultati e get_count_query solo restituisce tutti gli elementi nella tabella. Le query vengono create dinamicamente, ad esempio una query potrebbe essere:
Asset.query.join(StatusLabel).filter(StatusLabel.status == 'Deployable', or_(
Asset.assigned_to.isnot(None)),
Asset.deleted_at.is_(None))
posso contare gli elementi in questa query facilmente con 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()
Ma questo non riuscirà una volta che raggiunge la .scalar() metodo (e non riesco a rimuovere questo metodo). Quindi la domanda è: come posso applicare func.count('*')
a una query esistente?
Posso recuperare i filtri dalla mia query e applicarli alla query func.count('*')
?
Grazie per la risposta, ma questo non funzionerà per me. La query è costruita dinamicamente, non è sempre la stessa. Le sottoquelle – fasouto
possono aiutare. Ho aggiornato la mia risposta –
Grazie mille! Sono stato bloccato da questo semplice problema per ore! :) – fasouto