/ python

Contar número de queries en django

En un proyecto se debe tener bastante cuidado en la cantidad de consultas que se hacen a la base de datos, ya que estas influyen en gran medida en el tiempo de respuesta que tenga nuestra aplicación.

Una herramienta muy util para hacer debug en un proyecto en django es django debug toolbar entre todas las opciones que nos trae, está la opcion de ver los queries que se hacen por cada request, esto nos permite analizar y poder hacer la optimización necesaria.

¿Pero que pasa cuando queremos evaluar una sola función o un view que nos devuelve un json?, para esto podemos hacer uso de este pequeño decorador que nos muestra la cantidad de queries que se ejecutan en la función decorada, así podemos analizar cada parte de nuestro código por separado y ver que parte es la que hace la mayor cantidad de consultas.

from django.db import connection


def print_queries_quantity(func):

    def wrapper(self, *args, **kwargs):
        old = len(connection.queries)
        ret = func(self, *args, **kwargs)
        quantity = len(connection.queries) - old
        print '%d queries in %s' % (quantity, func.__name__)
        return ret
    return wrapper

#example

@print_queries_quantity
def get_object(self):
    obj = None
    # make queries
    return obj

# output example
# 10 queries in get_object