The difference between this project and all the others like it is that I needed to debug management command in Django, but all the others only provided middleware, which did not solve my problem.
The basic idea is to count duplicate queries, like django-debug-toolbar does, and output them. The number of duplicated queries and the color of the theme can be specified in the settings. It is also possible to output all requests at once (counted if they are duplicated).
It is enough to install the package and apply the decorator to the desired management command or view.
pip install django-query-counter
Please take note that the colored and reformatted SQL output depicted in the readme screenshots may not be achieved unless the specified additional packages are installed (which maybe already installed):
- colorize requires pygments
pip install Pygments
- reformat requires sqlparse
pip install sqlparse
The project can be used in two ways:
Import the decorator and apply it where you need to know the number of queries to the database.
- management command:
from django.core.management.base import BaseCommand
from query_counter.decorators import queries_counter
class Command(BaseCommand):
@queries_counter
def handle(self, *args, **options):
pass
- function-based views
from query_counter.decorators import queries_counter
@queries_counter
def index(request):
pass
- class-based views:
from django.utils.decorators import method_decorator
from query_counter.decorators import queries_counter
@method_decorator(queries_counter, name='dispatch')
class IndexView(View):
pass
- specifying middleware in settings for all views at once.
MIDDLEWARE = [
'query_counter.middleware.DjangoQueryCounterMiddleware',
]
It is possible to override the default settings. To do this, you need to include the app to the INSTALLED_APPS:
INSTALLED_APPS = [
...,
'query_counter',
...
]
Default settings:
{
'DQC_SLOWEST_COUNT': 5,
'DQC_TABULATE_FMT': 'pretty',
'DQC_SLOW_THRESHOLD': 1, # seconds
'DQC_INDENT_SQL': True,
'DQC_PYGMENTS_STYLE': 'tango',
'DQC_PRINT_ALL_QUERIES': False,
'DQC_COUNT_QTY_MAP': {
5: 'green',
10: 'white',
20: 'yellow',
30: 'red',
},
}
Feel free to override any of them.
Tabulate tables formats you can find here. Pygments styles available here.
Feel free to open an issue to report of any bugs. Bug fixes and features are welcome! Be sure to add yourself to the AUTHORS.md if you provide PR.
python setup.py sdist bdist_wheel
twine check dist/*
twine upload dist/*