Как увидеть django скорость запроса объекта - PullRequest
0 голосов
/ 16 января 2020

Я хотел бы протестировать различные способы поиска текста в django моделях с различными функциями. Есть ли способ напечатать в консоли или в шаблоне, сколько времени занимает запрос базы данных? Заранее спасибо (может и не понадобиться, но все же: это 3 функции, для которых я хочу проверить скорость.)

def first_results(request):
    if request.method == 'POST':
        query = request.POST.get('query')
        results = Page.objects.search(query)
        return render(request, 'results.html', {'results': results})
    else:
        return render(request, 'home.html')


def second_results(request):
    if request.method == 'POST':
        query = request.POST.get('query')
        results = Page.objects.annotate(search=SearchVector('title', 'content')).filter(
            search=query
        )
        return render(request, 'results.html', {'results': results})
    else:
        return render(request, 'home.html')


def third_results(request):
    if request.method == 'POST':
        query = request.POST.get('query')
        results = Page.objects.filter(
            Q(title__contains=query) | Q(content__contains=query)
        )
        return render(request, 'results.html', {'results': results})
    else:
        return render(request, 'home.html')

Ответы [ 4 ]

2 голосов
/ 16 января 2020

Если вы хотите лучше профилировать запросы, я рекомендую вам использовать Django Панель инструментов отладки ,

Если вы хотите что-то простое, используйте Django Регистрация БД в вашей консоли. Следуйте этому руководству .

1 голос
/ 16 января 2020

Используйте Django Панель инструментов отладки; он показывает вам SQL операторов, время выполнения подробно (и многое другое):

https://django-debug-toolbar.readthedocs.io/en/latest/index.html

1 голос
/ 16 января 2020

Вы можете записать все запросы на консоль, а затем сравнить их скорость. Чтобы включить ведение журнала вам нужно это в вашем settings.py:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    }
}
0 голосов
/ 16 января 2020

Вы можете получить информацию о запросе и времени с помощью приведенного ниже кода

Именно на вас, где вы поместите этот код ......

Лучше создать промежуточное программное обеспечение и поместить код под Метод process_response ().

from django.db import connection
for query in connection.queries:
    query_time = query.get('time')
    if query_time is None:
       query_time = query.get('duration', 0) / 1000
    total_time += float(query_time)

print('%s queries, total %s seconds' % (len(connection.queries), total_time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...