Django - クエリ結果の制限 質問する

Django - クエリ結果の制限 質問する

モデルの最後の 10 個のインスタンスを取得して、次のコードを作成します。

 Model.objects.all().order_by('-id')[:10]

最初にすべてのインスタンスをピックアップし、最後の 10 個だけをピックアップするのは本当ですか? もっと効果的な方法はありますか?

ベストアンサー1

Django クエリセットは遅延型です。つまり、クエリは、結果を明示的に要求した場合にのみデータベースにアクセスします。

したがって、クエリの結果を印刷するか実際に使用するまでは、データベースにアクセスせずにさらにフィルタリングできます。

以下に示すように、コードでは 1 つの SQL クエリのみを実行して、最後の 10 個の項目のみを取得します。

In [19]: import logging                                 
In [20]: l = logging.getLogger('django.db.backends')    
In [21]: l.setLevel(logging.DEBUG)                      
In [22]: l.addHandler(logging.StreamHandler())      
In [23]: User.objects.all().order_by('-id')[:10]          
(0.000) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" ORDER BY "auth_user"."id" DESC LIMIT 10; args=()
Out[23]: [<User: hamdi>]

おすすめ記事