2016-04-02 1 views
4

мои модели разработаны как такКак работает django-запрос?

class Warehouse: 
    name = ... 
    sublocation = FK(Sublocation) 

class Sublocation: 
    name = ... 
    city = FK(City) 

class City: 
    name = .. 
    state = Fk(State) 

Теперь, если я бросить запрос.

wh = Warehouse.objects.value_list(['name', 'sublocation__name', 
    'sublocation__city__name']).first() 

он возвращает правильный результат, но внутренне, сколько запросов он бросает? django извлекает данные по одному запросу?

ответ

5

Django делает только один запрос к базе данных для получения данных, которые вы описали. Когда вы делаете:

wh = Warehouse.objects.values_list(
    'name', 'sublocation__name', 'sublocation__city__name').first() 

Он переводит, чтобы этот запрос:

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")' 

Он получает результат в одном запросе. Вы можете рассчитывать количество запросов в вашей оболочке, как это:

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 
+1

я собираюсь часов, проведенных в настоящее время тестирования все мои запросы, как это спасибо – Crazyshezy

+1

Если ваши объекты отображаются на html-странице, вы можете вместо этого использовать django-debug-toolbar. Он сделает это за вас :) – v1k45

2

Мое предложение было бы написать тест для этого, используя assertNumQueries (docs here).

FYI Я не уверен, сколько запросов действительно отправлено в базу данных, 1 - это моя лучшая догадка. Отрегулируйте количество запросов, которые, как ожидается, пройдут в вашем проекте, и приложите это требование.

0

Существует обширная документация о том, как и когда запросы обрабатываются в Django docs: QuerySet API Reference.

Практически стандартный способ иметь хорошее представление о том, сколько и какие запросы выполняются во время визуализации страницы, - использовать Django Debug Toolbar. Это может точно сказать, сколько раз этот набор записей оценивается.

-1

Вы можете использовать Джанго-отладки-панели, чтобы увидеть реальные запросы к БД

 Смежные вопросы

  • Нет связанных вопросов^_^