2012-05-27 3 views
1

У меня есть следующие модели:Сколько запросов генерируется?

class JobApplication(models.Model): 
    profile = models.ForeignKey(UserProfile) 
    job = models.ForeignKey(JobPost) 

    def __unicode__(self): 
     return "%s - %s" % (self.profile.full_name, self.job.get_job_name()) 

# in JobPost model 
    def get_job_name(self): 
     if self.name: 
      return self.name 
     name = "%s - %s" % (self.production.name, self.position.position) 
     return name 

Как бы выяснить, сколько запросов генерируются, когда JobApplication QuerySet производится? Обычно я делаю print Model.objects.filter().query. Как я могу это сделать в этом случае, чтобы увидеть это?

+4

Проверить http://stackoverflow.com/questions/10695305/how-to-show-the-sql-django-runs/10701259#10701259 Использовать 'django.db.connection.queries' и' django-debug- toolbar' для отображения исполняемых SQL-запросов. – okm

+0

@okm для sql, который выполняется только в шаблоне? Например, если я делаю цикл 'for', и я вызываю метод db, который вызывает вызов db - я не могу ничего сделать в представлении здесь. (В качестве дополнительной заметки я уже использую панель debug-toolbar) – David542

+0

Панель инструментов debug может собирать и отображать SQL-запросы, которые выполняются в шаблоне – okm

ответ

0

Из документов,

>>> 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'}] 

Ссылка ссылка: click here for docs

1

Вы можете использовать встроенные средства протоколирования для вывода каждого сгенерированного запроса к терминалу на сервере разработки. Добавьте это в файле settings.py:

# settings.py 
LOG_LEVEL = 'DEBUG' if DEBUG else 'WARNING' 
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'simple': { 
      'format': '\n%(thread)d: %(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'class': 'django.utils.log.AdminEmailHandler' 
     }, 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple' 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
     'multiprocessing': { 
      'handlers': ['console'], 
      'level': LOG_LEVEL, 
      'propagate': False, 
     }, 
     'django': { 
      'handlers': ['console'], 
      'propagate': True, 
      'level': LOG_LEVEL, 
     }, 
     'cache_logger': { 
      'handlers': ['console'], 
      'propagate': True, 
      'level': LOG_LEVEL, 
     } 
    } 
} 

Таким образом, всякий раз, когда DEBUG это правда вы можете загрузить вид или вызвать функцию или что-нибудь и посмотреть сгенерированный запрос и время, которое потребовалось для завершения:

4072: DEBUG (0.016) SELECT "django_content_type"."id", "django_content_type"."name", "django_content_type"."app_label", "django_content_type"."model" 
FROM "django_content_type" WHERE "django_content_type"."id" = 9 ; args=(9,) 
+0

Спасибо, я думаю, вы забыли добавить регистратор, который захватывает db-запрос: 'django.db.backends'. – David542