私は大きなテーブルのすべての行からデータを読み取る必要があるが、私は一度にメモリにすべてのデータをプルする必要はありません。ページングを処理するSQLAlchemy関数はありますか?つまり、いくつかの行をメモリにプルし、必要に応じてさらにフェッチします。私はあなたがthis articleとしてlimit
とoffset
でこれを行うことができます理解SQLAlchemyのページング
は示唆して、私はむしろ私が持っていない場合は、そのハンドルではないと思います。
私は大きなテーブルのすべての行からデータを読み取る必要があるが、私は一度にメモリにすべてのデータをプルする必要はありません。ページングを処理するSQLAlchemy関数はありますか?つまり、いくつかの行をメモリにプルし、必要に応じてさらにフェッチします。私はあなたがthis articleとしてlimit
とoffset
でこれを行うことができます理解SQLAlchemyのページング
は示唆して、私はむしろ私が持っていない場合は、そのハンドルではないと思います。
はthis answerを参照してください。つまり、yield_per
演算子を使用できます。
あなたはフラスコSQLAlchemyのを使用している場合は、query
のpaginate方法を参照してください。 paginate
には、ページネーションを簡略化するいくつかの方法があります。
record_query = Record.query.paginate(page, per_page, False)
total = record_query.total
record_items = record_query.items
最初のページは、あなたがフラスコを使用していない場合は、ゼロ
私の他のコメントを無視し、これを良好に動作します。 – robru
これは、リミットとオフセットを使用しているソースをチェックした場合と同じように、悪い考えである可能性があります。それがオフセットされた行をフェッチするために、以前のすべての行を通過しているようになりましオフセット値が大きすぎる場合、データベースは、このようにパフォーマンス上の問題を引き起こし、これらの値のすべてを行くオフセットが..オフセット –
で割った1そう.total
戻り例外である必要があり、あなたはSQLAlchemyの機能「スライス」または「制限」のコンボを使用することができます&「オフセット'と記載されているように、here。たとえば、
リミットが悪い高く、パフォーマンス上の問題が発生します –
ウェブサイトのレンダリングのコンテキストではページネーションがサポートされているようです...私はデータベースに接続しようとしていますが、フロントエンドはありません。データベース層、 'limit'と'・オフセット反復で –
は、もともと文書化とおりに、実際に最も適切なシナリオです。私はここでの理論的根拠はデータベースの_anyway_で起こっていることだと思うので、あなた自身の 'for'ループを用意することもできます。 :) – MrGomez
実際、いいえ、私は非常に間違っています。私はより明確なリソースを見つけたので、私の答えを更新しています。 、私はちょうど '愚か無関係な領域に、予期せぬ結果を得る(** request.args)'辞書をしていたされるよう – MrGomez