Skip to content

Instantly share code, notes, and snippets.

@aleksandergurin
Last active April 14, 2020 14:02
Show Gist options
  • Save aleksandergurin/b868fe248e3b7974c1c51c083b15e985 to your computer and use it in GitHub Desktop.
Save aleksandergurin/b868fe248e3b7974c1c51c083b15e985 to your computer and use it in GitHub Desktop.
Django ORM recipes

Django ORM recipes

Miscellaneous

Enable debug logging

import logging

logger = logging.getLogger('django.db.backends')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())

Migrations

Show SQL for migration

./manage.py sqlmigrate app 0001_initial

Model used in the following examples

from django.db import models

class Owner(models.Model):
    name = models.TextField()

class Item(models.Model):
    name = models.TextField()
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)

Select related objects

res = list(
    models.Item.objects.select_related('owner').all()
)

Example of result SQL queries:

SELECT "app_item"."id", "app_item"."name", "app_item"."owner_id", "app_owner"."id", "app_owner"."name"
FROM "app_item"
  INNER JOIN "app_owner" ON ("app_item"."owner_id" = "app_owner"."id");  # args=()

Prefetch related objects

res = list(
    models.Owner.objects.prefetch_related('item_set').all()
)

Example of result SQL queries:

SELECT "app_owner"."id", "app_owner"."name" FROM "app_owner";  # args=()

SELECT "app_item"."id", "app_item"."name", "app_item"."owner_id"
FROM "app_item" WHERE "app_item"."owner_id" IN (1);  # args=(1,)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment