Django Querycount
Inspired by this post by David Szotten, this project gives you a middleware that prints DB query counts in Django's runserver console output.
Installation
pip install django-querycount
Just add querycount.middleware.QueryCountMiddleware
to your
MIDDLEWARE
.
Notice that django-querycount is hard coded to work only in DEBUG mode set to true
Settings
There are two possible settings for this app: The first defines threshold values used to color output, while the second allows you customize requests that will be ignored by the middleware. The default settings are:
QUERYCOUNT = { 'THRESHOLDS': { 'MEDIUM': 50, 'HIGH': 200, 'MIN_TIME_TO_LOG':0, 'MIN_QUERY_COUNT_TO_LOG':0 }, 'IGNORE_REQUEST_PATTERNS': [], 'IGNORE_SQL_PATTERNS': [], 'DISPLAY_DUPLICATES': None, 'RESPONSE_HEADER': 'X-DjangoQueryCount-Count' }
The QUERYCOUNT['THRESHOLDS']
settings will determine how many queries are
interpreted as high or medium (and the color-coded output). In previous versions
of this app, this settings was called QUERYCOUNT_THRESHOLDS
and that setting
is still supported.
The QUERYCOUNT['IGNORE_REQUEST_PATTERNS']
setting allows you to define a list of
regexp patterns that get applied to each request's path. If there is a match,
the middleware will not be applied to that request. For example, the following
setting would bypass the querycount middleware for all requests to the admin:
QUERYCOUNT = { 'IGNORE_REQUEST_PATTERNS': [r'^/admin/'] }
The QUERYCOUNT['IGNORE_SQL_PATTERNS']
setting allows you to define a list of
regexp patterns that ignored to statistic sql query count. For example, the following
setting would bypass the querycount middleware for django-silk sql query:
QUERYCOUNT = { 'IGNORE_SQL_PATTERNS': [r'silk_'] }
The QUERYCOUNT['RESPONSE_HEADER']
setting allows you to define a custom response
header that contains the total number of queries executed. To disable this header,
the supply None
as the value:
QUERYCOUNT = { 'RESPONSE_HEADER': None }
New in 0.4.0. The QUERYCOUNT['DISPLAY_DUPLICATES']
setting allows you
to control how the most common duplicate queries are displayed. If the setting
is None
(the default), duplicate queries are not displayed. Otherwise, this
should be an integer. For example, the following setting would always print the
5 most duplicated queries:
QUERYCOUNT = { 'DISPLAY_DUPLICATES': 5, }
License
This code is distributed under the terms of the MIT license.
Testing
Run python manage.py test querycount to run the tests. Note that this will modify your settings so that your project is in DEBUG mode for the duration of the querycount tests.
(side-note: this project needs better tests; for the moment, there are only smoke tests that set up the middleware and call two simple test views).
Contributing
Bug fixes and new features are welcome! Fork this project and send a Pull Request
to have your work included. Be sure to add yourself to AUTHORS.rst
.