我们说我有这样的模型:
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。
所以,我的问题是,是否存在性能差异(特别是对于包含许多字段的大型数据库和模型),或者我只是用长语句来扭曲所有内容?
答案 0 :(得分:0)
是的,我同意你的意见。它们之间没有太大的区别(只有一条记录的性能),因为在幕后django get()
方法运行filter()
方法,但是检查过滤器结果集是否只是一条记录。