Reputation: 11798
I want to see formated sql queries in the console of Django while developing
I have tried adding the below code to settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'level': 'DEBUG',
'handlers': ['console', ],
},
},
}
Now whenever there is any sql query it shows in the django console.
But its not well formatted. So how can i see the formatted sql queries instead of single line
Upvotes: 4
Views: 808
Reputation: 11798
I found the answer at this link Syntax highlighting for Django’s SQL query logging
I just added the following to my settings.py and now the sql is formatted in console even in jupyter notebook
import logging
class SQLFormatter(logging.Formatter):
def format(self, record):
# Check if Pygments is available for coloring
try:
import pygments
from pygments.lexers import SqlLexer
from pygments.formatters import TerminalTrueColorFormatter
except ImportError:
pygments = None
# Check if sqlparse is available for indentation
try:
import sqlparse
except ImportError:
sqlparse = None
# Remove leading and trailing whitespaces
sql = record.sql.strip()
if sqlparse:
# Indent the SQL query
sql = sqlparse.format(sql, reindent=True)
if pygments:
# Highlight the SQL query
sql = pygments.highlight(
sql,
SqlLexer(),
#TerminalTrueColorFormatter(style='monokai')
TerminalTrueColorFormatter()
)
# Set the records statement to the formatted query
record.statement = sql
return super(SQLFormatter, self).format(record)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'sql': {
'()': SQLFormatter,
'format': '[%(duration).3f] %(statement)s',
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
'sql': {
'class': 'logging.StreamHandler',
'formatter': 'sql',
'level': 'DEBUG',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['sql'],
'level': 'DEBUG',
'propagate': False,
},
'django.db.backends.schema': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
}
}
Upvotes: 4