SQLAlchemy(MySQLをクエリする)でAPIを設計しています。すべてのクエリにpage_size(LIMIT)パラメータとpage_number(OFFSET)パラメータを強制したいと思います。SQLAlchemyのすべてのクエリにLIMITとOFFSETを適用する
これをSQLAlchemyで行う方法はありますか?おそらくカスタムQueryオブジェクトを作成するためのファクトリを構築するのでしょうか?あるいはmixinクラスでこれを行う良い方法がありますか?
私は明白なことを試してみましたが、すべてのフィルタ条件が適用された後.limit()と.offset()が呼び出されなければならないので、それは動作しませんでした:
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
私はこれを使用しようとすると、私は例外を取得してください:
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.
あなたの質問への溶液を編集しないでください。代わりに、下記の別の回答として投稿してください。 – Matt