打印对项目执行的查询以及行回溯。

django-query-debugger的Python项目详细描述


django查询调试器

打印对项目执行的查询以及行回溯。

目录

  1. Why Should I Use This?
  2. When Should I NOT Use This?
  3. How To
  4. Features
  5. Usage
    1. Singleton module
    2. On Django shell
    3. Traceback feature

我为什么要用这个?

django orm很棒,但有时可能有点晦涩。有时你想知道你的项目在做什么查询,有时你看到一些奇怪的查询运行在你的数据库日志,不知道什么触发。这个小库有助于解决这个问题。

我什么时候不用这个?

在你的生产环境中。这家伙工作很好,但你不需要把这个蹩脚的黑客攻击失败点插入到你的生产代码中,是吗?

如何

只需导入此文件。有关详细信息,请参见Usage部分

但请记住:

不要在生产中使用。我喜欢这个小技巧,但制作时不需要它

功能

  • 直接使用django orm或django.db.connection打印您所做的每个查询
  • 打印出您、您的框架或外部libs所做的每个查询
  • 仅打印由特定文件触发的查询
  • 打印可用于调试的字符串
  • 相关文件的回溯查询执行

用法:

单体模块:

  • 由于python的模块是单例的,所以在任何地方导入这个库都会影响who项目。

例如,当您点击这样一个简单的django视图时:

"""myproject/myapp/views.py"""fromdjango.httpimportHttp404fromdjango.shortcutsimportrenderfrommyapp.modelsimportMyModelimportquery_debuggerdefdetail(request,my_model_id):try:p=MyModel.objects.get(pk=my_model_id)exceptMyModel.DoesNotExist:raiseHttp404("MyModel does not exist")returnrender(request,'mymodel/detail.html',{'mymodel':p})

您的服务器输出如下:

[12:03:23]myproject$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
May 15, 2019 - 11:03:31
Django version 2.1, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[11:03:38] INFO "GET /mymodel/1 HTTP/1.1" 200 38346
  /Users/fabio/projects/myproject/myapp/views.py Line: 7
    SELECT "myapp_mymodel"."id", "myapp_mymodel"."name" FROM "myapp_mymodel" WHERE "myapp_mymodel"."id" = 1

关于django壳

>>>importquery_debugger>>>frommyapp.modelsimportMyModel>>>MyModel.objects.count()/Users/fabio/envs/py36/lib/python3.6/site-packages/traitlets/config/application.pyLine:658/Users/fabio/envs/py36/lib/python3.6/site-packages/IPython/terminal/ipapp.pyLine:356/Users/fabio/envs/py36/lib/python3.6/site-packages/IPython/terminal/interactiveshell.pyLine:489/Users/fabio/envs/py36/lib/python3.6/site-packages/IPython/core/interactiveshell.pyLine:3291<ipython-input-3-0ccef3f04b0a>Line:1/Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/query.pyLine:383/Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/sql/query.pyLine:483/Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/sql/compiler.pyLine:1061/Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/backends/utils.pyLine:100SELECTCOUNT(*)AS"__count"FROM"myapp_mymodel"3

回溯功能

  • 默认行为是仅跟踪由代码触发的查询,并对由框架或库触发的查询进行操作。但是,如果需要,可以展开到任何像这样触发的查询:
"""myproject/myapp/views.py"""importquery_debuggerquery_debugger.everywhere()...

您的服务器输出如下:

[12:03:23]myproject$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
/Users/fabio/envs/py36/lib/python3.6/site-packages/django/utils/autoreload.py Line: 225
  /Users/fabio/envs/py36/lib/python3.6/site-packages/django/core/management/commands/runserver.py Line: 120
    /Users/fabio/envs/py36/lib/python3.6/site-packages/django/core/management/base.py Line: 442
      /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/migrations/executor.py Line: 18
        /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/migrations/loader.py Line: 209
          /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/migrations/recorder.py Line: 62
            /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/query.py Line: 138
              /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/sql/compiler.py Line: 1061
                /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/backends/utils.py Line: 100
                  SELECT "django_migrations"."app", "django_migrations"."name" FROM "django_migrations"
May 15, 2019 - 11:15:57
Django version 2.1, using settings 'thundera.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[11:03:38] INFO "GET /mymodel/1 HTTP/1.1" 200 38346
  /Users/fabio/envs/py36/lib/python3.6/site-packages/django/contrib/auth/decorators.py Line: 20
    /Users/fabio/projects/myproject/myapp/views.py Line: 7
      /Users/fabio/envs/py36/lib/python3.6/site-packages/django/utils/functional.py Line: 347
        /Users/fabio/envs/py36/lib/python3.6/site-packages/django/contrib/auth/middleware.py Line: 12
          /Users/fabio/envs/py36/lib/python3.6/site-packages/django/contrib/auth/__init__.py Line: 189
            /Users/fabio/envs/py36/lib/python3.6/site-packages/django/contrib/auth/backends.py Line: 98
              /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/manager.py Line: 82
                /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/query.py Line: 54
                  /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/models/sql/compiler.py Line: 1061
                    /Users/fabio/envs/py36/lib/python3.6/site-packages/django/db/backends/utils.py Line: 100
                      SELECT "myapp_mymodel"."id", "myapp_mymodel"."name" FROM "myapp_mymodel" WHERE "myapp_mymodel"."id" = 1

或者缩小到导入调试器的文件:

"""myproject/myapp/views.py"""importquery_debuggerquery_debugger.here()# will only print queries trigged by myproject/myapp/views.py...

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList Java中的搜索字符串   另一个web应用程序的java访问会话   另一个应用程序中的活动和服务之间的java通信   java根据Json字符串类型将Json字符串转换为对象   eclipse如何解决java中的错误异常。lang.NoSuchMethodError:'java。字符串javax。摆动JOptionPane。showInputDialog(java.lang.String)'   线程“main”java中的安卓异常。lang.NoClassDefFoundError:org/codehaus/jackson/JsonParseException   java如何在安卓 emulator上显示Mat图像?使用NDK   Java在本地读取测试源文件,但在服务器上读取失败   java dowhile循环用于计算输入数字中的数字。故障排除代码   JAva初学者在编写获取成本的方法时遇到困难   java是shell游戏。我如何让物体移动,特别是在特定的曲线上,但顺序是随机的?   java如何区分两个同名的JButton   java为什么我在Spring Boot中需要一个接口?   java将文件路径插入数据库将删除\   使用InterfaceType初始化java对象   java如何部署一个分为Angular、Spring Boot和MySQL的项目?   java如何使用Symja解决不等式?