django如何实现存在性检查
Posted
技术标签:
【中文标题】django如何实现存在性检查【英文标题】:How does django implement existence check 【发布时间】:2014-11-09 04:55:24 【问题描述】:对于以下查询:
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
【问题讨论】:
为什么不检查查询本身?在 shell 中使用connection.queries
,或者在您的应用程序中使用 Django 调试工具栏。
@DanielRoseman 你能告诉我如何使用connection.queries
在视图代码中对此进行分析吗?
@PeterDeGlopper exists().query
不起作用。 exists()
返回一个布尔值。
【参考方案1】:
Django 总是尝试优化exists()
查询。对于mysql
,它使用LIMIT 1
:
SELECT 1 FROM people LIMIT 1
正如 Daniel 在 cmets 中所说,您可以通过查看 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()
查询。
【讨论】:
以上是关于django如何实现存在性检查的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何检查自定义小部件定义中是不是存在字段错误?