Простое сравнение планов MySQL в Django - PullRequest
0 голосов
/ 18 июня 2010

есть ли способ распечатать запрос, например, из этой строки кода

Model.objects.all().order_by(sort_headers.get_order_by())

Я хочу спланировать наилучший способ использования Django, но с> 1 миллионом объектов в моей модели это становится слишкоммедленно.

Ответы [ 2 ]

1 голос
/ 18 июня 2010

На ум приходят два варианта:

  1. Вы можете просматривать необработанные запросы SQL как описано в Django FAQ :

    Убедитесь, что настройки Django DEBUG установлено в True. Тогда просто сделайте это:

    >>> from django.db import connection
    >>> connection.queries
    [{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls', 'time': '0.002'}]
    
  2. Вы также можете посмотреть на debugsqlshell поставляется как часть Панель инструментов отладки Django пакет. Это выводит основной SQL для каждого вызова ORM, который приводит в запросе к базе данных, например:

    >>> from page.models import Page
    >>> ### Lookup and use resulting in an extra query...
    >>> p = Page.objects.get(pk=1)
    SELECT "page_page"."id",
           "page_page"."number",
           "page_page"."template_id",
           "page_page"."description" FROM "page_page" WHERE
    "page_page"."id" = 1
    
0 голосов
/ 13 июля 2014

Каждый набор запросов имеет ссылку .query на объект запроса.Печать этого объекта даст вам выполненный запрос.

>>> f = Model.objects.all().order_by(sort_headers.get_order_by())
>>> print(f.query)
>>> query = str(f.query) # if you want to save it
...