Как делать запросы Django

Я всегда использовал библиотеку Python timeit во время моих маленьких программ Python. Теперь я разрабатываю приложение Django, и мне было интересно, как приурочить функции Django, особенно запросы.

Например, у меня есть def index(request) в my views.py, который создает кучу вещей при загрузке страницы индекса. Как я могу использовать timeit для выполнения этой конкретной функции, не изменяя слишком много моих существующих функций?

Ответ 2

Если ваш проект django находится в отладке, вы можете просмотреть свои запросы к базе данных (и времена), используя:

>>> from django.db import connection
>>> connection.queries

Я знаю, что это не удовлетворит ваши потребности в функциях профилей, но надеюсь, что это поможет для части запросов!

Ответ 3

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

Вот еще одно решение, вы можете использовать connection.queries. Это вернет команду SQL, созданную для команды, которая была выполнена непосредственно перед командой connect.queries. Вы можете выполнить reset_queries после получения времени предыдущего запроса, используя reset_queries(). Использование reset_queries() не является обязательным.

Предположим, у вас есть модель с именем Устройство. Вы можете измерить время запроса следующим образом:

>>> from django.db import connection, reset_queries
>>> from appname.models import Device
>>> devices = Device.objects.all()
>>> connection.queries
>>> reset_queries()

Ответ 4

Вы также можете использовать командную строку Django shell.

%time SomeModel.objects.count()

Показывает счет Wall time в мс. Нечего импортировать, кроме SomeModel.