Je concevais une API avec SQLAlchemy (interrogeant MySQL) et je voudrais forcer toutes mes requêtes à avoir les paramètres page_size (LIMIT) et page_number (OFFSET).Application de LIMIT et OFFSET à toutes les requêtes dans SQLAlchemy
Existe-t-il une manière propre de faire cela avec SQLAlchemy? Peut-être construire une usine de quelque sorte pour créer un objet de requête personnalisé? Ou peut-être y a-t-il un bon moyen de le faire avec un cours de mixin?
J'ai essayé la chose évidente et il ne fonctionne pas parce que .limit() et .Offset() doit être appelée après toutes les conditions de filtrage ont été appliquées:
def q(page=0, page_size=None):
q = session.query(...)
if page_size: q = q.limit(page_size)
if page: q = q.offset(page*page_size)
return q
Quand j'essayer d'utiliser cela, je obtenir l'exception:
sqlalchemy.exc.InvalidRequestError: Query.filter() being called on a Query which already has LIMIT or OFFSET applied. To modify the row-limited results of a Query, call from_self() first. Otherwise, call filter() before limit() or offset() are applied.
S'il vous plaît ne pas modifier une solution dans votre question. Au lieu de cela, affichez-le comme une réponse distincte ci-dessous. – Matt