gpt4 book ai didi

python - Django 查询集执行

转载 作者:行者123 更新时间:2023-12-02 04:23:11 25 4
gpt4 key购买 nike

在 Django 中,每次我过滤查询集或解析对象中的字段时,查询集都会对数据库执行新的 SQL 查询吗?

例如...如果我执行:

a = test.objects.all()
a2 = a.filter(name='Alex')
a3 = a.filter(name='John')
a4 = a.filter(name='Steve')

此序列是否向数据库发送 4 个查询?或者它只是发送 1,然后在 Python 中处理过滤器?

出于速度目的,我试图对数据库进行尽可能少的查询...并且不知道这是否实际上会造成更多的速度瓶颈?

谢谢。

最佳答案

Django querysets are lazy 。以下行不会引起任何数据库查询。

a = test.objects.all()
a2 = a.filter(name='Alex')
a3 = a.filter(name='John')
a4 = a.filter(name='Steve')

话虽如此,如果您对所有四个查询集进行评估(例如,通过使用 list,那么您将执行 4 个单独的查询。

a = list(test.objects.all())
a2 = list(a.filter(name='Alex'))
a3 = list(a.filter(name='John'))
a4 = list(a.filter(name='Steve'))

数据库速度非常快。对于此示例,让数据库执行所有四个查询可能就可以了。您可以尝试在一个查询中获取您想要的三个名称,例如:

a_combined = a.filter(name__in=['Alex', 'John', 'Steve'])

但这会让你的代码变得更加复杂。 Django 不提供在 Python 中执行 filter() 调用的方法。

您可能会找到django-debug-toolbar对于查看您的 View 正在执行哪些查询很有用。

关于python - Django 查询集执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770289/

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