Получение Django Query Count в оболочке manage.py - PullRequest
2 голосов
/ 27 января 2010

Есть ли способ подсчитать мои запросы во время сеанса оболочки manage.py? Это было бы полезно в качестве средства проверки некоторых характеристик ORM между запросами.

Кроме того, было бы неплохо получить запросы сами, и я думаю, что их время выполнения пока я на этом.

т.е.

>>> из myapp.models import User

>>> User.objects.filter (имя = 'Bob')

>>> User.objects.filter (имя = 'Bob')

>>> [с моим счетчиком запросов]

>>> User.objects.all ()

>>> [с моим счетчиком запросов]

>>> User.objects.filter (имя = 'Greg')

>>> [с моим счетчиком запросов]

1 Ответ

2 голосов
/ 27 января 2010

QuerySet объекты имеют метод .count(), а также могут быть присвоены len(), если вы ищете:

>>> User.objects.filter(name='Bob')
>>> _.count()

Вы также можете проверить запросы, используя ._as_sql()

>>> User.objects.filter(name='Bob')._as_sql()

или получить все уже сделанные запросы (с указанием времени их выполнения) с помощью

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

Обратите внимание, что простой вызов User.objects.filter(name='Bob') фактически не превысит любые запросы SQL. Django ждет, пока вы что-то с ним сделаете, прежде чем он выполнит SQL-запрос.

Вы можете сделать запросы более читабельными, установив модуль python sqlparse и выполнив что-то вроде этого:

>>> import sqlparse
>>> def sql(qs):
...     return sqlparse.format(qs._as_sql()[0], reindent=True, keyword_case='upper')
>>> print sql(User.objects.filter(name='Bob'))

См. http://code.google.com/p/python-sqlparse/

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