# -*- coding: utf-8 -*- """ This module is a scratchpad for general development, testing & debugging Well, even more so than pcmd.py. You best ignore p2cmd.py. """ from django.core.management.base import NoArgsCommand from pprint import pprint import time import sys from pexp.models import * def reset_queries(): if django.VERSION < (1, 8): connection.queries = [] else: connection.queries_log.clear() def show_queries(): print print 'QUERIES:', len(connection.queries) pprint(connection.queries) print connection.queries = [] def print_timing(func, message='', iterations=1): def wrapper(*arg): results = [] reset_queries() for i in xrange(iterations): t1 = time.time() x = func(*arg) t2 = time.time() results.append((t2 - t1) * 1000.0) res_sum = 0 for r in results: res_sum += r median = res_sum / len(results) print '%s%-19s: %.4f ms, %i queries (%i times)' % ( message, func.func_name, res_sum, len(connection.queries), iterations ) sys.stdout.flush() return wrapper class Command(NoArgsCommand): help = "" def handle_noargs(self, **options): if False: TestModelA.objects.all().delete() a = TestModelA.objects.create(field1='A1') b = TestModelB.objects.create(field1='B1', field2='B2') c = TestModelC.objects.create(field1='C1', field2='C2', field3='C3') reset_queries() print TestModelC.base_objects.all() show_queries() if False: TestModelA.objects.all().delete() for i in xrange(1000): a = TestModelA.objects.create(field1=str(i % 100)) b = TestModelB.objects.create(field1=str(i % 100), field2=str(i % 200)) c = TestModelC.objects.create(field1=str(i % 100), field2=str(i % 200), field3=str(i % 300)) if i % 100 == 0: print i f = print_timing(poly_sql_query, iterations=1000) f() f = print_timing(poly_sql_query2, iterations=1000) f() return NormalModelA.objects.all().delete() a = NormalModelA.objects.create(field1='A1') b = NormalModelB.objects.create(field1='B1', field2='B2') c = NormalModelC.objects.create(field1='C1', field2='C2', field3='C3') qs = TestModelA.objects.raw("SELECT * from pexp_testmodela") for o in list(qs): print o from django.db import connection, transaction from random import Random rnd = Random() def poly_sql_query(): cursor = connection.cursor() cursor.execute(""" SELECT id, pexp_testmodela.field1, pexp_testmodelb.field2, pexp_testmodelc.field3 FROM pexp_testmodela LEFT OUTER JOIN pexp_testmodelb ON pexp_testmodela.id = pexp_testmodelb.testmodela_ptr_id LEFT OUTER JOIN pexp_testmodelc ON pexp_testmodelb.testmodela_ptr_id = pexp_testmodelc.testmodelb_ptr_id WHERE pexp_testmodela.field1=%i ORDER BY pexp_testmodela.id """ % rnd.randint(0, 100) ) # row=cursor.fetchone() return def poly_sql_query2(): cursor = connection.cursor() cursor.execute(""" SELECT id, pexp_testmodela.field1 FROM pexp_testmodela WHERE pexp_testmodela.field1=%i ORDER BY pexp_testmodela.id """ % rnd.randint(0, 100) ) # row=cursor.fetchone() return