我想要获取模型的最后10个实例,并具有以下代码:
Model.objects.all().order_by('-id')[:10]
是不是先拿起所有实例,然后只拿最后10个实例? 有没有更有效的方法?
我想要获取模型的最后10个实例,并具有以下代码:
Model.objects.all().order_by('-id')[:10]
是不是先拿起所有实例,然后只拿最后10个实例? 有没有更有效的方法?
Django查询集很懒.这意味着只有当您明确请求结果时,查询才会命中数据库.
因此,在您打印或实际使用查询结果之前,您可以在没有数据库访问的情况下进一步使用过滤.
正如您在下面看到的,您的代码只执行一个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>]