Cra*_*ezy 4 django django-queryset
我的模型设计如此
class Warehouse:
name = ...
sublocation = FK(Sublocation)
class Sublocation:
name = ...
city = FK(City)
class City:
name = ..
state = Fk(State)
Run Code Online (Sandbox Code Playgroud)
现在如果我抛出一个查询.
wh = Warehouse.objects.value_list(['name', 'sublocation__name',
'sublocation__city__name']).first()
Run Code Online (Sandbox Code Playgroud)
它会返回正确的结果,但内部会抛出多少查询?是django在一个请求中获取数据?
Django只对数据库进行一次查询,以获取您描述的数据.当你这样做时:
wh = Warehouse.objects.values_list(
'name', 'sublocation__name', 'sublocation__city__name').first()
Run Code Online (Sandbox Code Playgroud)
它转换为此查询:
SELECT "myapp_warehouse"."name", "myapp_sublocation"."name", "myapp_city"."name"
FROM "myapp_warehouse" INNER JOIN "myapp_sublocation"
ON ("myapp_warehouse"."sublocation_id" = "myapp_sublocation"."id")
INNER JOIN "myapp_city" ON ("myapp_sublocation"."city_id" = "myapp_city"."id")'
Run Code Online (Sandbox Code Playgroud)
它在单个查询中获得结果.您可以在shell中计算查询数量,如下所示:
from django.db import connection as c, reset_queries as rq
In [42]: rq()
In [43]: len(c.queries)
Out[43]: 0
In [44]: wh = Warehouse.objects.values_list('name', 'sublocation__name', 'sublocation__city__name').first()
In [45]: len(c.queries)
Out[45]: 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |