姜戈。这两个查询是否相同?
Django. Are these two queries the same?
首先。我不确定如何写这个问题,所以它对 SO 用户更有用,也许有人可以编辑这个问题。
所以,我有这两个模型:
class A(models.Model):
...
class B(models.Model):
foreign = models.Foreignkey(A)
aproperty = models.CharField(...)
我在一个视图中有这两种可能的查询:
b_objs = B.objects.filter(aproperty=value)
a_objs = [b.foreign for b in b_objs]
or
a_objs = A.objects.filter(b__aproperty=value)
它们一样贵吗?
不仅"not equally expensive",而且结果也不一样。
第一种方法:直接在 B
上查询,然后通过在 b_objs
上循环获取所有 foreign
。结果是一个列表。
第二种方法:你在underline实现中做了一个数据库join
操作,然后获取结果。结果是一个查询集。
显然第二种方法更有效,因为您只需加入数据库一次即可获取结果,而第一种方法需要多次访问数据库才能获得 A
个对象。
首先。我不确定如何写这个问题,所以它对 SO 用户更有用,也许有人可以编辑这个问题。
所以,我有这两个模型:
class A(models.Model):
...
class B(models.Model):
foreign = models.Foreignkey(A)
aproperty = models.CharField(...)
我在一个视图中有这两种可能的查询:
b_objs = B.objects.filter(aproperty=value)
a_objs = [b.foreign for b in b_objs]
or
a_objs = A.objects.filter(b__aproperty=value)
它们一样贵吗?
不仅"not equally expensive",而且结果也不一样。
第一种方法:直接在 B
上查询,然后通过在 b_objs
上循环获取所有 foreign
。结果是一个列表。
第二种方法:你在underline实现中做了一个数据库join
操作,然后获取结果。结果是一个查询集。
显然第二种方法更有效,因为您只需加入数据库一次即可获取结果,而第一种方法需要多次访问数据库才能获得 A
个对象。