Django ORM和mysql限制查询之间的区别

时间:2015-11-04 09:25:07

标签: mysql django

从行的'mysql查询开始获取'n'记录将类似于:

select user_id from someTable where name = 'someName' limit s, n;

Django中的相同查询将是:

someTable.objects.filter(name=someName).values_list('user_id',flat=True)[s:s+n]

现在,原始sql查询将读取并获取'n'个记录,因此如果n更少,则很可能会更快。

然而,在Django的情况下,它会执行类似于mysql的操作,还是会读取并获取所有记录,然后会做一个切片来给我们'n'个记录?

1 个答案:

答案 0 :(得分:3)

Django ORM提供高效查询。它会在您对数据执行某些操作后执行查询(基本上说)

https://docs.djangoproject.com/en/1.8/topics/db/queries/#limiting-querysets

someTable.objects.filter(name=someName)[s:s+n]

会变成:

SELECT name 
FROM someTable 
WHERE name = 'someName'
LIMIT s, n;

如果你想亲眼看看,there is a way看看Django正在执行哪些原始查询。 Django development toolbar是执行此操作的有效工具