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

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第三方库


热门话题
java使用EntityManager有没有更有效的习惯用法?   Android上的java Google应用程序引擎(GAE)响应代码和cookie   如何在Java中创建单元测试?   java从DB获取特定列的最新行   java替换所有悬空元字符   java使用Hibernate删除SQL表中的数据   swing显示JComponent对象Java   java在确认内容类型后如何将URL保存到文件?   javascript如何从段落中选择大量单词?(硒)   java在Linux上使用BundleEnableTiveCode不起作用   java使用日志似然性来比较不同的mallet主题模型?   java无法在Tomcat7上运行Spring Boot 2.0:“由于缺少ServletWebServerFactory bean,无法启动ServletWebServerApplicationContext。”   java有办法显式引用非静态内部类实例吗?   java如何使用Spring的NamedParameterJdbcTemplate在MySQL数据库中创建和删除表?