Django では、QuerySet
繰り返し処理して結果を出力する予定がある場合、オブジェクトをカウントするための最良のオプションは何ですか? len(qs)
またはqs.count()
?
(また、同じ繰り返しでオブジェクトをカウントすることはオプションではありません。)
Django では、QuerySet
繰り返し処理して結果を出力する予定がある場合、オブジェクトをカウントするための最良のオプションは何ですか? len(qs)
またはqs.count()
?
(また、同じ繰り返しでオブジェクトをカウントすることはオプションではありません。)
Django docscount
ではなく使用を推奨していますがlen
:
注:
len()
セット内のレコード数を決定するだけの場合は、QuerySets で使用しないでください。SQL を使用してデータベース レベルでカウントを処理する方がはるかに効率的でSELECT COUNT(*)
あり、Django はcount()
まさにこの理由からメソッドを提供します。
とにかくこの QuerySet を反復しているため、結果はキャッシュされます (を使用していない限りiterator
)。これにより、データベースに再度アクセスすることを回避し、異なる数の結果を取得する可能性も回避できるlen
ため、を使用することをお勧めします!) .
を使用している場合は、同じ理由で (count を使用するのではなく) 反復するときにカウント変数を含めることをお勧めします。iterator
len(qs)
結果を反復処理する必要があるため、ここでは使用する方が理にかなっていると思います。qs.count()
やりたいことがすべてカウントを出力し、結果を反復しない場合は、より良いオプションです。
len(qs)
でデータベースにヒットしますが、 でデータベースにヒットselect * from table
しqs.count()
ますselect count(*) from table
。
またqs.count()
、戻り整数を返し、それを反復することはできません