【问题标题】:Getting Django Query Count While in manage.py shell在 manage.py shell 中获取 Django 查询计数
【发布时间】:2010-01-27 05:48:51
【问题描述】:
有没有办法在 manage.py shell 会话期间计算我的查询?作为一种检查查询之间的一些 ORM 行为的方法,它会很有帮助。
此外,最好自己提取查询,我猜它们的执行时间。
即
>>>从 myapp.models 导入用户
>>>User.objects.filter(name='Bob')
>>>User.objects.filter(name='Bob')
>>>[这是我的查询数]
>>>User.objects.all()
>>>[这是我的查询数]
>>>User.objects.filter(name='Greg')
>>>[这是我的查询数]
【问题讨论】:
标签:
django
performance
orm
debugging
【解决方案1】:
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/