当尝试从 django 对象返回值列表时,使用列表理解的性能会更好:
[x.value for x in Model.objects.all()]
或在 django 的
values_list
函数上调用 list():list(Model.objects.values_list('value', flat=True))
为什么?
最佳答案
最有效的方法是采用第二种方法(使用 values_list()
)。这样做的原因是,这会修改发送到数据库的 SQL 查询以仅选择提供的值。
第一种方法首先从数据库中选择所有值,然后再次过滤它们。因此,您已经“花费”了资源来使用该方法获取所有值。
您可以比较通过使用 str(queryset.query)
包装 QuerySet 生成的查询,它将返回执行的实际 SQL 查询。
请参阅下面的示例
class Model(models.Model):
foo = models.CharField()
bar = models.CharField()
str(Model.objects.all().query)
# SELECT "model"."id", "model"."foo", "model"."bar" FROM "model"
str(Model.objects.values_list("foo").query)
# SELECT "model"."foo" FROM "model"
关于django - 使用列表推导式或 django 的 'values_list' 函数,哪种方法更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55636405/