【发布时间】:2015-09-04 10:13:04
【问题描述】:
假设我有一个这样的模型:
class A(models.Model):
title = models.CharField(max_length=10)
(more fields)
我想获取实例的标题字段的值。我可以使用filter:
A.objects.filter(id=1).values_list('title', flat=True)
生成如下 SQL 语句:
SELECT "app_table_a"."title" FROM "app_table_a" WHERE ("app_table_a"."a_id" = 1) LIMIT whatever
或使用get:
A.objects.get(id=1).title
生成这个:
SELECT "app_table_a"."id", "app_table_a"."title", ... ,"app_table_a"."all the fields in the model" FROM "app_table_a" WHERE ("app_table_a"."a_id" = 1)
不同之处在于查询的SELECT 部分,这给人的印象是第一种方法是更好的选择。但是当我查看这些语句的执行时间时,我没有看到有意义的差异,并且两个语句都在波动,例如 25 毫秒。
所以,我的问题是在性能方面是否有任何区别(特别是对于大型数据库和具有许多字段的模型),还是我只是用长语句扭曲了所有内容?
【问题讨论】:
-
在我看来,可读性比微优化更重要。第二个选项更具可读性。
-
@Brandon 感谢您的提示;这很方便!
-
不客气。总是乐于提供帮助。
标签: python sql django django-queryset