在Django中获取实例的一个字段的最快方法

时间:2015-06-18 16:34:45

标签: python sql django django-queryset

我们说我有这样的模型:

d <- transform(melt(yourdf, id = NULL),
               gender = gsub("_.*$", "", variable),
               condition = gsub("^[^_]*_", "", variable),
               DV = value)

d <- d[, -c(1, 2)]

d
#   gender condition   DV
# 1   male    cond.1  456
# 2   male    cond.2 5654
# 3 female    cond.1  566
# 4 female    cond.2  456

我想获取实例的标题字段的值。我可以使用class A(models.Model): title = models.CharField(max_length=10) (more fields)

filter

生成如下的SQL语句:

A.objects.filter(id=1).values_list('title', flat=True)

或使用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) 部分查询,这给人的印象是第一种方法是更好的选择。但是,当我查看这些陈述的执行时间时,我看不出有意义的差异,两个陈述都会波动,例如25ms。

所以,我的问题是,是否存在性能差异(特别是对于包含许多字段的大型数据库和模型),或者我只是用长语句来扭曲所有内容?

1 个答案:

答案 0 :(得分:0)

是的,我同意你的意见。它们之间没有太大的区别(只有一条记录的性能),因为在幕后django get()方法运行filter()方法,但是检查过滤器结果集是否只是一条记录。