Django provides the ORM which is database and vendor agnostic, as a result we can perform operations on database regardless kind of database running behind.Thus, developer may not need expertise on specifiec database, all he needs is how to play with ORM But, sometimes we may want to see the how Django is converting ORM into raw SQL queries of specific database either for debugging or learning.
There are multiples ways to see converted Queries
View Queries using django.db.connection.queries
You can find queries so far that converted by ORM at django.db.connection.queries
print converted django queries
>>> from django.db import connection
>>> print(connection.queries)
Access raw SQL query on QuerySet object
Every queryset object has query attribute, which holds the actual SQL query which will be sent to Database. query attribute return query when either print or convert it to str
>>> qs = MyModel.objects.all()
>>> print(qs.query)
Configure Django Logger to log Queries
Django logs debug messages including raw SQL queries it is executing to console. To see these message you have to configure django logger and set DEBUG True
Add following setting to settings.py file of project
DEBUG=True
** DEBUG=True is not recommended in production
—
Configure django logger and set it’s level DEBUG in settings.py
'django': {
'handlers': ['console'],
'propagate': False,
'level': 'DEBUG'
},
Simple Complete logging setting to log Django logs including queries , Copy and paste the following setting into your setting.py module , so django displays logs messages including queries being sent to DB that are converted from ORM to raw SQL on console
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(asctime)s-%(module)s-%(levelname)s :: %(message)s'
},
'simple': {
'format': '%(levelname)s :: %(message)s'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': False,
'level': 'DEBUG'
},
}
}
Refer more on logging configuration at Django Logging
Database general query logs
All most all DBMS software’s support the logging of queries which are being execute for both debugging and tuning. You can enable the logging for a while to monitor queries from multiple clients.
Leave a Reply