【问题标题】: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/

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 2012-02-20
      • 2021-03-04
      • 2011-07-23
      • 2016-11-10
      • 1970-01-01
      • 2022-01-05
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多