Skip to main content

Shows queries, detects N+1 in Django, Simple to use, Can Customize Console Result

Project description

django-query-capture

Build status Python Version Dependencies Status

Code style: black Security: bandit Pre-commit Semantic Versions License Coverage Report

Overview

img.png

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

License

This project is licensed under the terms of the MIT license. See LICENSE for more details.

Credits 🚀 Your next Python package needs a bleeding-edge project structure.

This project was generated with python-package-template

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-query-capture-0.3.2.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

django_query_capture-0.3.2-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

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

Hashes for django-query-capture-0.3.2.tar.gz
Algorithm Hash digest
SHA256 8c7e2b842df7166fcfbe290b4061f2784871f74d888820607683465b8cc06299
MD5 980330ff03c684048d9128b376b620f7
BLAKE2b-256 c55ed90187db64df0e7db92f55c574c5cf6c0c28640acd08351c786d562fc4f6

See more details on using hashes here.

File details

Details for the file django_query_capture-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_query_capture-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9979829e120cb2f66d651765fcb2b870cf08184c882322ed5e8478ff3929e97a
MD5 bca84735e7dae578220cc645f1be50ca
BLAKE2b-256 86a7c3a753fa4b456d88900ba2d5335fcf20e009260e312fcf4497b47c9d7839

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page