Skip to main content

DB utility to help you catch query inefficiencies in Django.

Project description

This is a simple implementation of the django_query_analyze function detailed in The Django Speed Handbook: making a Django app faster, featured in the Django newsletter a few weeks back.

The idea is that you can wrap you pure db-query functions with a decorator, and make sure the function is calling the database as you expect it to.

from django_qc import db_helper
from app.models import Song

@db_helper(count=1)
def get_songs():
    return serialize_songs(Song.objects.all(), many=True)

See the original article for a more thorough description of the issue.

Since the Django ORM is lazy, you will likely want to wrap your serializers rather than your queries, if they’re not in the same function. For example:

from django_qc import db_helper

@db_helper(count=1)
def serialize_songs(song: Song)
    return {
        'name': song.name,
        'cd': song.cd.name,
    }

This package should only run during development.

Installation

Install using pip:

pip install django-qc

Settings

There are three settings that can be configured:

DB_HELPER {
    'RAISE_EXC': True,
    'LOG_EXC': True,
    'DEBUG': DEBUG
}
  • RAISE_EXC

    Whether or not to raise an error when the specified query count deviates the actual query count.

    Default: True

  • LOG_EXC

    Whether or not to log an exception (logger.exception) when the specified query count deviates the actual query count. If you’re using Sentry or similar tools, an exception logger will raise an issue in the system. This only applies to when RAISE_EXC is False.

    Default: True

  • DEBUG

    Whether or not to check query counts at runtime.

    Default: True

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-qc-0.0.1.tar.gz (7.9 kB view hashes)

Uploaded Source

Built Distribution

django_qc-0.0.1-py3-none-any.whl (9.8 kB view hashes)

Uploaded Python 3

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