Django,有没有办法看到正在执行的SQL查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django,有没有办法看到正在执行的SQL查询?相关的知识,希望对你有一定的参考价值。

我正在探索https://github.com/shymonk/django-datatable,它看起来不错,但我想知道它是否会查询整个数据或查询分页数据。确定性能非常需要此信息。

我想知道在Django中,有没有办法看到正在执行的底层查询是什么?

我使用Django == 1.11.7

答案

如果要查看Django的ORM生成的实际SQL,可以打印出查询集的.query属性。这是一个名为home的应用程序和我在Django shell中生成的名为Question的模型的示例:

 $ python manage.py shell
(InteractiveConsole)
>>> from home.models import Question
>>> q = Question.objects.all()
>>> print(q.query)
SELECT "home_question"."id", "home_question"."date_added", "home_question"."question", "home_question"."number_of_answers" FROM "home_question"

看看django-datatable的方法,看起来过滤和分页视图基于过滤get_queryset的结果,返回model.objects.all()

def get_queryset(self):
    model = TableDataMap.get_model(self.token)
    if model is None:
        return None
    return model.objects.all()
另一答案

查看已执行的所有查询的另一种方法。

python manage.py shell
>> from django.db import connection
>> from app.models import SomeModel
>> obj = SomeModel.objects.first()
>> connection.queries
>> <Returns a list of all the queries that have been executed in the session upto this point>

这也允许您查看已执行的查询数

以上是关于Django,有没有办法看到正在执行的SQL查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django shell 会话期间获取 SQL 查询计数

从 Django 创建 SQL 插入脚本以填充 PostgreSQL 数据库

有没有办法测量 SQL 查询执行所需的时间而不用 Java 获取结果?

有没有办法在不使用用户定义函数的情况下在 SQL 中动态执行查询?

[Django] 查看orm自己主动运行的原始查询sql

Django 中的时间 SQL 查询