【发布时间】:2018-11-11 02:56:44
【问题描述】:
首先,我举个例子:
# Student is a model class, and it has attributes: name, age, gender and so on.
temp_students = Student.objects.filter(age=18)
students = temp_students.filter(gender='girl')
如果我调试这段代码,我可以得到一个 SQL,它可能是 "SELECT * FROM student WHERE age = 18"(称为 SQL-A)。然后,当我到达第二行时,我可能会得到另一个 SQL,即"SELECT * FROM student WHERE gender = 'girl' IN (SELECT * FROM student WHERE age = 18)"(称为 SQL-B)。
那么,我的问题是 SQL-A 和 SQL-B 什么时候执行?它是否连接到数据库两次,并获得两个结果集?在这种情况下,数据库是否有任何不必要的支出?如果不是这样,为什么我可以在 DEBUG MODE 中获得 SQL 的样子?
如果您的答案末尾有任何相关的 Django ORM 文档或文章,那就太好了。
谢谢!
【问题讨论】:
-
非常感谢,我以前不知道这个工具。太棒了,我盯着它。
-
你也可以在这里点赞我的评论:p
标签: django database python-3.x django-models orm