Sie könnten wahrscheinlich herumspielen und instanziiert Ihre eigene Instanz einer leeren Pagination
Objekt, um eine Abfrage zu vermeiden, aber es könnte einfacher sein, eine einfache, schnelle Abfrage auszuführen, die keine Zeilen zurückgibt:
>>> empty_paginator = models.Object.query.filter_by(id=None).paginate()
>>> empty_paginator.items
[]
>>> empty_paginator.has_next
False
Die Abfrage sollte sehr schnell sein, da sie sich auf dem Primärschlüssel der Tabelle befindet und daher einen Index verwendet. Stellen Sie nur sicher, dass Sie etwas auswählen, das nicht existiert, z. eine ID von None
. Dann verwenden Sie es wie folgt aus:
if list_of_ids:
results = models.Object.query.filter(models.Object.id.in_(list_of_ids)).paginate(page, 10, False)
else:
results = models.Object.query.filter_by(id=-1).paginate()
andere Möglichkeit, ein Pagination
Objekt zu Unterklasse wäre, die Methoden überschreiben, die ein gültiges Abfrageobjekt benötigen, um eine Abfrage zu verhindern, dass:
class EmptyPaginator(flask.ext.sqlalchemy.Pagination):
def __init__(self):
super(EmptyPaginator, self).__init__(None, 1, 1, 0, [])
def next(self, error_out=False):
self.page += 1
return self
def prev(self, error_out=False):
self.page -= 1
return self
Verwenden Sie es wie Dieser:
if list_of_ids:
results = models.Object.query.filter(models.Object.id.in_(list_of_ids)).paginate(page, 10, False)
else:
results = EmptyPaginator()
oder diese (prägnanter aber weniger lesbar):
results = models.Object.query.filter(models.Object.id.in_(list_of_ids)).paginate(page, 10, False) if list_of_ids else EmptyPaginator()