121 lines
3.5 KiB
Python
121 lines
3.5 KiB
Python
# -*- 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
|