これは、querysetiterator()
メソッドの django ドキュメントからのものです。
QuerySet は通常、その結果を内部的にキャッシュするため、評価が繰り返されても追加のクエリが発生することはありません。対照的に、 iterator() は、QuerySet レベルでのキャッシュを行わずに結果を直接読み取ります (内部的に、デフォルトの反復子は iterator() を呼び出し、戻り値をキャッシュします)。一度だけアクセスする必要がある多数のオブジェクトを返す QuerySet の場合、これによりパフォーマンスが向上し、メモリが大幅に削減されます。
読んだ後でも、私はまだ混乱しています。パフォーマンスの向上とメモリの削減に関する行は、このiterator()
方法を使用する必要があることを示唆しています。誰かが良いケースと悪いケースのiterator()
使用例をいくつか挙げることができますか?
クエリ結果がキャッシュされていなくても、本当にモデルに複数回アクセスしたい場合は、誰かが次のことを行うことはできませんか?
saved_queries = list(Model.objects.all().iterator())