pythonsqldjangodatabasedjango-database

How can I see the raw SQL queries Django is running?


Is there a way to show the SQL that Django is running while performing a query?


Solution

  • See the docs FAQ: "How can I see the raw SQL queries Django is running?"

    django.db.connection.queries contains a list of the SQL queries:

    from django.db import connection
    print(connection.queries)
    

    Querysets also have a query attribute containing the query to be executed:

    print(MyModel.objects.filter(name="my name").query)
    

    Note that the output of the query is not valid SQL, because:

    "Django never actually interpolates the parameters: it sends the query and the parameters separately to the database adapter, which performs the appropriate operations."

    From Django bug report #17741.

    Because of that, you should not send query output directly to a database.

    If you need to reset the queries to, for example, see how many queries are running in a given period, you can use reset_queries from django.db:

    from django.db import reset_queries
    from django.db import connection
    
    reset_queries()
    # Run your query here
    print(connection.queries)
    >>> []