Как увидеть запросы, выполняемые Django ORM? - PullRequest
1 голос
/ 20 апреля 2020

У меня есть DEBUD = True в settings.py файле. У меня MySQL база данных настроена с django. У меня есть Course модель в courses/models.py. В courses/views.py у меня есть:

@api_view(['GET'])
def courses_list(request):
  courses = Course.objects.all()
  serializer = CourseSerializer(courses, many=True)
  return Response(serializer.data)

Теперь, если я сделаю запрос от Почтальона, чтобы поразить это представление, я думаю, что должен быть выполнен некоторый запрос, такой как SELECT * FROM COURSES. Как узнать, какие запросы были выполнены, когда я выполняю запрос к некоторому внутреннему URL?

Я также попытался from django.db import connection, как описано здесь , но получил пустой массив, подобный этому:

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

Пожалуйста, помогите мне достичь того, чего я хочу.

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Если вы запустите это в отдельной оболочке, то это, конечно, не будет содержать запросы другой работающей программы. Ответ касается запросов, которые вы выполняете в самой оболочке.

Например, если вы будете использовать:

>>> print(Course.objects.all())
>>> from django.db import connection
>>> connection.queries

Он покажет запрос, поскольку вы принудительно оценили QuerySet в это shell.

Вы можете использовать пакет наподобие django-sqlprint-middleware для печати запросов. Таким образом, вы устанавливаете его, например, в локальной среде:

pip install <b>django-sqlprint-middleware</b>

, а затем добавляете этот промежуточный компонент в настройке MIDDLEWARE параметра settings.py:

# settings.py

MIDDLEWARE = (
    # &hellip;,
    <b>'django_sqlprint_middleware.SqlPrintMiddleware'</b>,
    # &hellip;,
)

Это будет только распечатывать запросы, когда DEBUG или TESTING установлены на True. Тем не менее, я бы посоветовал не использовать это на производстве.

0 голосов
/ 20 апреля 2020

Запустите ваше приложение Django следующим образом:

./manage.py shell_plus --print-sql

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

...