Джанго, как я могу просмотреть запрос в оболочке управления - PullRequest
6 голосов
/ 07 октября 2010

Как я могу увидеть мои django запросы из интерфейса управления оболочкой

Я пытался использовать это, но дает мне запросы, которые проходят через сервер django

from django.db import connection
connection.queries()

Я видел это где-то, не помню где ??

Ответы [ 4 ]

8 голосов
/ 07 октября 2010

Django, как просмотреть запрос в управляющей оболочке

Существует два способа просмотра запроса в оболочке . Во-первых, если вы используете набор запросов, вы можете использовать атрибут query набора запросов. Например,

qs = MyModel.objects.all()
print qs.query

Второй, когда запрос не виден сразу. Например, когда вы обновляете набор запросов, используя update(). В этом случае вы можете:

from django.db import connection
MyModel.objects.all().update(foo = 'bar')
print connection.queries 
# print connection.queries[-1] # if you want to see only the last query

Я пытался использовать это, но дает мне запросы, которые проходят через сервер django

Я не понимаю, что вы подразумеваете под "дает мне запросы, которые проходят через сервер Django". Вы пытаетесь увидеть запросы во время работы приложения? В этом случае используйте django-debug-toolbar или сниппет , на который ссылается @rubayeet.

4 голосов
/ 21 февраля 2017

Самый простой способ - использовать расширения django . Вы можете установить его с

$ pip install django-extensions

Запустите вашу оболочку с

./manage.py shell_plus --print-sql

Выполнить запрос

In [1]: Book.objects.all()
Out[1]: SELECT "book_book"."id", "book_book"."name", "book_book"."author_id" FROM "book_book" LIMIT 21

Execution time: 0.087548s [Database: default]

<QuerySet [<Book: The Stranger>, <Book: Atlas Shrugged>]>

Если вы не хотите добавлять --print-sql каждый раз, в настройках django вы можете установить

SHELL_PLUS_PRINT_SQL = True

Альтернативный способ - включить ведение журнала для запросов базы данных.

LOGGING = {
    'version': 1,
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'filters': ['require_debug_true'],
        }
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
}

Добавьте это в свои настройки и перезапустите оболочку, чтобы увидеть запросы SQL.

1 голос
/ 07 октября 2010

Вы можете распечатать sql для отдельных запросов следующим образом:

your_query = YourModel.objects.all()
print your_query.query

Это все, что вам нужно?

0 голосов
/ 07 октября 2010

Я использую этот фрагмент кода Django , который перечисляет все запросы в представлении в отображаемом шаблоне.Довольно полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...