打印对项目执行的查询以及行回溯。
django-query-debugger的Python项目详细描述
django查询调试器
打印对项目执行的查询以及行回溯。
目录
我为什么要用这个?
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...