Ich entwerfe eine API mit SQLAlchemy (Abfrage von MySQL) und ich möchte alle meine Abfragen zwingen, page_size (LIMIT) und page_number (OFFSET) Parameter zu haben.Anwenden von LIMIT und OFFSET auf alle Abfragen in SQLAlchemy
Gibt es einen sauberen Weg, dies mit SQLAlchemy zu tun? Vielleicht eine Art Factory erstellen, um ein benutzerdefiniertes Query-Objekt zu erstellen? Oder vielleicht gibt es eine gute Möglichkeit, dies mit einer Mixing-Klasse zu tun?
habe ich versucht, die offensichtliche Sache, und es hat nicht funktioniert, weil .limit() und .Offset() aufgerufen werden muss, nachdem alle Filterbedingungen angewandt wurden:
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
Wenn ich das versuchen Sie es mit, ich Erhalten Sie die Ausnahme:
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.
Bitte keine Änderungen vornehmen, eine Lösung in Frage. Stattdessen posten Sie es als separate Antwort unten. – Matt