Skip to content

Instantly share code, notes, and snippets.

@strokirk
Last active June 6, 2019 12:42
Show Gist options
  • Select an option

  • Save strokirk/ee42df8438aace89e05d to your computer and use it in GitHub Desktop.

Select an option

Save strokirk/ee42df8438aace89e05d to your computer and use it in GitHub Desktop.
def print_queries(w=80):
from django.db import connection
print()
for i, query in enumerate(connection.queries):
sql = query["sql"]
print("[{:>2}] {}".format(i + 1, sql[:w]))
print("Total queries: %s" % len(connection.queries))
print()
def norm_sql(sql):
import re
tbl = re.search(r" FROM `(?P<table>\w*)`", sql)
if tbl:
tblname = tbl.groups()[0]
sql = re.sub(r"`%s`\.`(?P<fld>\w*)`" % tblname, r"%s.\1" % tblname[0].upper(), sql)
sql = re.sub(r" FROM ", "\nFROM ", sql)
return sql
class QueryCounter:
def __init__(self):
from django.db import connection
import time
self.connection = connection
self.queries_per_tick = [len(connection.queries)]
self.ticks = [time.time()]
def tick(self):
self.ticks.append(time.time())
self.queries_per_tick.append(len(self.connection.queries))
return self.ticks[-2] - self.ticks[-1]
def total_queries(self):
return self.queries_per_tick[-1] - self.queries_per_tick[0]
def total_time(self):
return self.ticks[-1] - self.ticks[0]
def slowest_tick(self):
slowest = 0
for i, tick in enumerate(self.ticks[1:]):
if tick - self.ticks[i] > slowest:
slowest = tick - self.ticks[i]
return slowest
def get_queries(self):
return self.connection.queries[self.queries_per_tick[0]:self.queries_per_tick[-1]]
def slowest_queries(self):
return sorted(self.get_queries(), key=lambda s: s['time'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment