对于以下查询:
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
答案 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()
查询。