如何在Django中为过滤器查询指定最大结果?

inf*_*oop 7 django django-queryset

我想从一个匹配给定过滤器查询的大型数据库中检索前500个结果.

目前我正在使用以下(非常低效)的方法..

results = Entries.objects.filter(text__icontains="somequery")[0:500]
Run Code Online (Sandbox Code Playgroud)

但我认为此查询将整个数据库加载到内存中,然后截断结果.这非常慢.

有没有更优雅的方式来做到这一点?谢谢!

Yuj*_*ita 25

这是做到这一点的方法.

SQL生成使用,LIMIT因此它不会将整个数据库加载到内存中并进行python切片.

请注意,您可以使用http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is查看SQL django正在编写的内容.django.db.connection.queries -运行

但一个鲜为人知的技巧是打印queryset.query或打电话sql = queryset.query.__str__()

>>> results = Entries.objects.filter(text__icontains="somequery")[0:500]
>>> print results.query
SELECT ... FROM ... WHERE ... LIKE ... LIMIT 500
Run Code Online (Sandbox Code Playgroud)