使用django.db.connection.queries

Hau*_*Haf 10 django connection django-queryset

我有一个Python/Django应用程序,它运行了很多SQL语句.出于调试目的,我想我应该为我创建一个简单的视图,它只列出已经运行的所有SQL语句.

根据文档,这段代码应该足以做到这一点:

    from django.db import connection
    connection.queries
Run Code Online (Sandbox Code Playgroud)

只要DEBUG是真的.

但是,这并没有给我任何东西.DEBUG肯定设置为True.在什么情况下这个connection.queries存储?我的意思是,我应该能够执行一个执行大量SQL语句的页面,然后切换到我创建的http:// myserver/sql视图,看看那些SQL语句,对吗?当然使用相同的浏览器会话...

我确实检查了db.reset_queries()是否在代码中的任何地方运行,看起来不是.

任何想法为什么connection.queries总是空的?

Dan*_*man 18

Ben是对的,您只能看到当前流程的查询.您可以在同一视图中或在控制台中使用它,但不能在视图之间使用它.

查看视图中正在执行的查询的最佳方法是使用Django调试工具栏.


pan*_*ore 9

@Daniel Roseman这是一个好主意,但如果你想知道sql查询开箱即用:

安装django-command-extensions并将其添加到已安装的应用程序中.它会在项目中添加许多utils命令,其中之一:

  • debugsqlshell:输出在Python交互式shell中工作时执行的SQL.

例: python manage.py debugsqlshell

In [1]:from django.contrib.auth.models import User
In [1]:User.objects.all()

Out[2]: SELECT "auth_user"."id",
   "auth_user"."username",
   "auth_user"."first_name",
   "auth_user"."last_name",
   "auth_user"."email",
   "auth_user"."password",
   "auth_user"."is_staff",
   "auth_user"."is_active",
   "auth_user"."is_superuser",
   "auth_user"."last_login",
   "auth_user"."date_joined"
    FROM "auth_user" LIMIT 21  [1.25ms]
Run Code Online (Sandbox Code Playgroud)