gpt4 book ai didi

sql - Django 何时执行数据库查找?

转载 作者:行者123 更新时间:2023-12-04 07:01:52 24 4
gpt4 key购买 nike

从以下代码:

dvdList = Dvd.objects.filter(title = someDvdTitle)[:10]

for dvd in dvdList:
result = "Title: "+dvd.title+" @ "+dvd.price+"."

Django 什么时候进行查找?也许这只是偏执狂,但似乎如果我注释掉 for 循环,它会更快地返回。第一行是设置过滤器然后 for 循环执行它,还是我完全糊涂了?这些代码行实际上会发生什么?

编辑:

如果我将 objects.filter 限制为“1000”,然后在 for 循环中实现一个计数器,该计数器在 10 次迭代后脱离它,会发生什么。这会有效地只得到 10 个值还是 1000 个?

最佳答案

Django 查询集是惰性求值的,所以是的,在您尝试从中获取值之前,查询实际上不会被执行(就像您在 for 循环中所做的那样)。

从文档:

You can evaluate a QuerySet in the following ways:

Iteration. A QuerySet is iterable, and it executes its database query the first time you iterate over it. For example, this will print the headline of all entries in the database:

for e in Entry.objects.all():
print e.headline

...(snip)...



When Querysets are evaluated .

根据您的编辑:

如果您将过滤器限制为 1000,然后在 10 次迭代后在 for 循环中实现了一个计数器,那么您将访问数据库的所有 1000 行 - Django 无法提前确切知道您的内容。重新使用 Queryset - 它只知道您想要一些数据,因此评估它构建的查询字符串。

关于sql - Django 何时执行数据库查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com