Shows queries, detects N+1 in Django, Simple to use, Can Customize Console Result
Project description
django-query-capture
Overview
Django Query Capture can check the query situation at a glance, notice slow queries, and notice where N+1 occurs.
Some reasons you might want to use django-query-capture:
- It can be used to simply check queries in a specific block.
- It supports Django Middleware, Context Manager, and Decorator.
- When you use Context Manager, you can get real-time query data.
- You can see where the query occurs.
- Inefficient queries can be found in the test code.
- It is easy to customize by simply changing the table shape, changing the color, and selecting and setting the desired output.
- It supports customization that allows you to decorate the output freely from the beginning.
- Fully Documented
- It supports Type hint everywhere.
Simple Usage
- Just add it to Middleware without any other settings, and it will be output whenever a query occurs.
MIDDLEWARE = [
...,
"django_query_capture.middleware.QueryCaptureMiddleware",
]
- Use in function-based views. or just function
from django_query_capture import query_capture
@query_capture()
def my_view(request):
pass
- Use in class-based views.
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
from django_query_capture import query_capture
@method_decorator(query_capture, name='dispatch')
class AboutView(TemplateView):
pass
- Use it as a context.
When used as Context, you can check the query in real time.
from django_query_capture import query_capture
from tests.news.models import Reporter
@query_capture()
def run_something():
with query_capture() as capture:
Reporter.objects.create(full_name=f"target-1")
print(len(capture.captured_queries)) # console: 1
Reporter.objects.create(full_name=f"target-2")
print(len(capture.captured_queries)) # console: 2
- Use in test
Test code can capture inefficient queries through the AssertInefficientQuery
Util.
from django.test import TestCase
from django_query_capture.test_utils import AssertInefficientQuery
class AssertInefficientQueryTests(TestCase):
def test_assert_inefficient_query(self):
with AssertInefficientQuery(num=19):
self.client.get('/api/reporter') # desire threshold count 19 but, /api/reporter duplicate query: 20, so raise error
Installation
pip install -U django-query-capture
or install with Poetry
poetry add django-query-capture
Full Documentation
Extension documentation is found here: https://ashekr.github.io/django-query-capture/.
🛡 License
This project is licensed under the terms of the MIT
license. See LICENSE for more details.
Credits
This project was generated with python-package-template
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-query-capture-0.3.2.tar.gz
.
File metadata
- Download URL: django-query-capture-0.3.2.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.13.0-1031-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c7e2b842df7166fcfbe290b4061f2784871f74d888820607683465b8cc06299 |
|
MD5 | 980330ff03c684048d9128b376b620f7 |
|
BLAKE2b-256 | c55ed90187db64df0e7db92f55c574c5cf6c0c28640acd08351c786d562fc4f6 |
File details
Details for the file django_query_capture-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: django_query_capture-0.3.2-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.13.0-1031-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9979829e120cb2f66d651765fcb2b870cf08184c882322ed5e8478ff3929e97a |
|
MD5 | bca84735e7dae578220cc645f1be50ca |
|
BLAKE2b-256 | 86a7c3a753fa4b456d88900ba2d5335fcf20e009260e312fcf4497b47c9d7839 |