代码之家  ›  专栏  ›  技术社区  ›  Koobz

在manage.py shell中获取django查询计数

  •  2
  • Koobz  · 技术社区  · 14 年前

    在manage.py shell会话期间,是否有计算查询的方法?这将有助于检查查询之间的某些ORM行为。

    另外,最好是自己拉查询,我猜在执行时它们的执行时间是多少。

    >>>从myapp.models导入用户

    >>>user.objects.filter(name='bob')

    >>>user.objects.filter(name='bob')

    >>>[wth是我的查询计数]

    >>>user.objects.all()。

    >>>[wth是我的查询计数]

    >>>user.objects.filter(name='greg')

    >>>[wth是我的查询计数]

    1 回复  |  直到 14 年前
        1
  •  2
  •   Will Hardy    14 年前

    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/