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

时间:2011-02-19 21:38:26

标签: django django-queryset

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

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

results = Entries.objects.filter(text__icontains="somequery")[0:500]

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

有更优雅的方法吗?谢谢!

1 个答案:

答案 0 :(得分:25)

这是做到这一点的方法。

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

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

但鲜为人知的诀窍是打印queryset.query或致电sql = queryset.query.__str__()

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