Skip to content

Instantly share code, notes, and snippets.

@mymindwentblvnk
Created June 10, 2022 07:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mymindwentblvnk/bd2e90ba6514700989c98088bec73674 to your computer and use it in GitHub Desktop.
Save mymindwentblvnk/bd2e90ba6514700989c98088bec73674 to your computer and use it in GitHub Desktop.

Django GraphQL Notes

Debugging

Put this in settings.py to see executed SQL queries

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    }
}

For a nested query like this

query MyQuery {
  colors {
    name
    fruits {
      name
      id
    }
  }
}

you will get three SQL statements (no optimization)

(0.000) SELECT "app_color"."id", "app_color"."name" FROM "app_color"; args=(); alias=default
(0.000) SELECT "app_fruit"."id", "app_fruit"."name", "app_fruit"."color_id" FROM "app_fruit" WHERE "app_fruit"."color_id" = 1; args=(1,); alias=default
(0.000) SELECT "app_fruit"."id", "app_fruit"."name", "app_fruit"."color_id" FROM "app_fruit" WHERE "app_fruit"."color_id" = 2; args=(2,); alias=default

Strawberry Django Optimizer

With the Strawberry Django Optimizer you will get only one statement containing a JOIN statement.

(0.000) SELECT "app_fruit"."id", "app_fruit"."name", "app_fruit"."color_id", "app_color"."id", "app_color"."name" 
FROM "app_fruit" 
LEFT OUTER JOIN "app_color" 
ON ("app_fruit"."color_id" = "app_color"."id"); args=(); alias=default
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment