django如何实现存在检查

时间:2014-09-15 15:43:23

标签: python mysql django django-models django-orm

对于以下查询:

res = People.objects.all().exists()

django究竟在做什么,使用mysql后端?是以下内容:

cursor.execute('SELECT * FROM people')
results = cursor.fetchall()
if results:
    res = True
else:
    res = False

或者,它是否使用了更加优化的东西,例如:

cursor.execute('SELECT 1 FROM people')
if cursor.fetchone():
    res = True
else:
    res = False

1 个答案:

答案 0 :(得分:3)

Django总是尝试优化exists()查询。如果mysql使用LIMIT 1

SELECT 1 FROM people LIMIT 1

Daniel在评论中指出,您可以通过查看connection.queries来探索Django所做的基础查询:

from django.db import connection

res = People.objects.all().exists()
print connection.queries

How can I see the raw SQL queries Django is running?

上查看更多信息

仅供参考,django.db.models.sql.Query类中的has_results()方法负责构建exists()查询。