Projektuję interfejs API z SQLAlchemy (wysyłanie zapytań do MySQL) i chciałbym wymusić na wszystkich moich zapytaniach parametry page_size (LIMIT) i page_number (OFFSET).Stosowanie LIMIT i OFFSET do wszystkich zapytań w SQLAlchemy
Czy istnieje czysty sposób robienia tego z SQLAlchemy? Być może budowanie fabryki jakiegoś rodzaju, aby utworzyć niestandardowy obiekt zapytania? A może jest dobry sposób na zrobienie tego z klasą mixin?
Próbowałem oczywistą rzeczą i to nie działa, ponieważ .limit() i .offset() musi być wywołana po wszystkie warunki zostały zastosowane filtry:
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
gdy próbuję za pomocą tego, ja z wyjątkiem:
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.
Proszę nie edytować roztwór do Twojego pytania. Zamiast tego zamieść go jako osobną odpowiedź poniżej. – Matt