あなたは周りの混乱、おそらく可能性があり、クエリを回避するために、空のPagination
オブジェクトの独自のインスタンスをインスタンス化し、単に行を戻さないシンプルな、速い、クエリを実行する方が簡単かもしれません:
>>> empty_paginator = models.Object.query.filter_by(id=None).paginate()
>>> empty_paginator.items
[]
>>> empty_paginator.has_next
False
クエリはテーブルのプライマリキーにあるので非常に高速である必要があります。したがって、インデックスを使用します。あなたが存在しないものを選択したことを確認してください。 idはNone
です。そして、このようにそれを使用します。
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()
もう一つの方法は、クエリを避けるために、有効なクエリオブジェクトを必要とするメソッドをオーバーライド、Pagination
オブジェクトをサブクラス化するために、次のようになります。
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
は次のようにそれを使用しますこの:
if list_of_ids:
results = models.Object.query.filter(models.Object.id.in_(list_of_ids)).paginate(page, 10, False)
else:
results = EmptyPaginator()
またはこの(より簡潔あまり読み):
results = models.Object.query.filter(models.Object.id.in_(list_of_ids)).paginate(page, 10, False) if list_of_ids else EmptyPaginator()