問題のコード:
random_items = random.shuffle(Item.query.all())[20:30]
これはFlask/SQLAlchemyアプリにあります。Item
モデルです。
それが私が今していることであり、それは機能しますが、実際のデータセットを使い始めると災害が発生することが予想されます。
これを適切に行うにはどうすればよいですか?
問題のコード:
random_items = random.shuffle(Item.query.all())[20:30]
これはFlask/SQLAlchemyアプリにあります。Item
モデルです。
それが私が今していることであり、それは機能しますが、実際のデータセットを使い始めると災害が発生することが予想されます。
これを適切に行うにはどうすればよいですか?
私はあなたの懸念について完全には確信が持てません。大きなデータセットを返すので、大きなリストはメモリ内で操作されますか?
その場合、移植性について過度に心配していなければ、SQL ステートメント内で実行できます。つまり、MySQL を使用している場合は、次のことができます。
from sqlalchemy.sql.expression import func
Item.query.order_by(func.rand()).offset(20).limit(10).all()
または、PostgreSQL の場合:
from sqlalchemy.sql.expression import func
Item.query.order_by(func.random()).offset(20).limit(10).all()
他のデータベースにも同様のメカニズムがあるため、呼び出される関数はターゲットに応じて異なります。もちろん、SQLAlchemy のバックエンドのいずれかで実行できる汎用アプリを作成しようとしている場合は、提供されている例に固執する必要があるかもしれません。