108

Django では、QuerySet繰り返し処理して結果を出力する予定がある場合、オブジェクトをカウントするための最良のオプションは何ですか? len(qs)またはqs.count()

(また、同じ繰り返しでオブジェクトをカウントすることはオプションではありません。)

4

5 に答える 5

148

Django docscountではなく使用を推奨していますがlen

注:len()セット内のレコード数を決定するだけの場合は、QuerySets で使用しないでください。SQL を使用してデータベース レベルでカウントを処理する方がはるかに効率的でSELECT COUNT(*)あり、Django はcount()まさにこの理由からメソッドを提供します。

とにかくこの QuerySet を反復しているため、結果はキャッシュされます (を使用していない限りiterator)。これにより、データベースに再度アクセスすることを回避し、異なる数の結果を取得する可能性も回避できるlenため、を使用することをお勧めします!) . を使用している場合は、同じ理由で (count を使用するのではなく) 反復するときにカウント変数を含めることをお勧めします。
iterator

于 2013-01-14T21:32:31.380 に答える
29

len(qs)結果を反復処理する必要があるため、ここでは使用する方が理にかなっていると思います。qs.count()やりたいことがすべてカウントを出力し、結果を反復しない場合は、より良いオプションです。

len(qs)でデータベースにヒットしますが、 でデータベースにヒットselect * from tableqs.count()ますselect count(*) from table

またqs.count()、戻り整数を返し、それを反復することはできません

于 2013-01-14T21:46:13.863 に答える