我想从与给定过滤器查询匹配的大型数据库中检索前500个结果。
目前我正在使用以下(非常低效)的方法..
results = Entries.objects.filter(text__icontains="somequery")[0:500]
但我认为此查询会将整个数据库加载到内存中,然后截断结果。这非常慢。
有更优雅的方法吗?谢谢!
答案 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