我无法理解在什么情况下 .values() 或 .values_list() 比仅使用 Model 实例更好?
我认为以下都是等效的:
results = SomeModel.objects.all()
for result in results:
print(result.some_field)
results = SomeModel.objects.all().values()
for result in results:
print(result['some_field'])
results = SomeModel.objects.all().values_list()
for some_field, another_field in results:
print(some_field)
Run Code Online (Sandbox Code Playgroud)
显然这些都是愚蠢的例子,有人能指出使用 .values() / .values_list() 而不是直接使用 Model 实例的充分理由吗?
编辑 :
我做了一些简单的分析,使用包含 2 CharField(max_length=100) 的 noddy 模型,迭代了 500 个实例以将“first”复制到另一个变量,取 200 次运行的平均值,得到以下结果:
Test.objects.all() time: 0.010061947107315063
Test.objects.all().values('first') time: 0.00578328013420105
Test.objects.all().values_list('first') time: 0.005257354974746704
Test.objects.all().values_list('first', flat=True) time: 0.0052023959159851075
Test.objects.all().only('first') time: 0.011166254281997681
Run Code Online (Sandbox Code Playgroud)
所以答案很明确:性能!(大多数情况下,请参阅下面的 knbk 答案)