Anwenden von LIMIT und OFFSET auf alle Abfragen in SQLAlchemy
Ich bin der Gestaltung einer API mit SQLAlchemy (Abfragen von MySQL), und ich möchte es zu zwingen, alle meine Fragen zu haben page_size (LIMIT) und page_number (OFFSET) Parameter.
Ist es eine saubere Art und Weise, dies zu tun mit SQLAlchemy? Vielleicht Bau einer Fabrik von einer Art, um eine benutzerdefinierte Abfrage erstellen-Objekt? Oder vielleicht gibt es ein guter Weg, dies zu tun mit einer mixin-Klasse?
Versuchte ich das naheliegende getan und es hat nicht funktioniert, weil .limit() und .offset() muss aufgerufen werden, nachdem alle filter-Bedingungen wurden angewendet:
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 versuche über diese, bekomme ich die 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.
InformationsquelleAutor der Frage Rob Crowell | 2012-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, ein zunächst erforderliches argument, das muss eine Gruppe von Abfragefilter. So,
oder,
InformationsquelleAutor der Antwort pydsigner