107 lines
3.2 KiB
Python
107 lines
3.2 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.
|
|
"""
|
|
import uuid
|
|
|
|
from django.core.management.base import NoArgsCommand
|
|
from django.db.models import connection
|
|
from pprint import pprint
|
|
import time,sys
|
|
|
|
from pexp.models import *
|
|
|
|
def reset_queries():
|
|
connection.queries=[]
|
|
|
|
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:
|
|
ModelA.objects.all().delete()
|
|
a=ModelA.objects.create(field1='A1')
|
|
b=ModelB.objects.create(field1='B1', field2='B2')
|
|
c=ModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
|
reset_queries()
|
|
print ModelC.base_objects.all();
|
|
show_queries()
|
|
|
|
if False:
|
|
ModelA.objects.all().delete()
|
|
for i in xrange(1000):
|
|
a=ModelA.objects.create(field1=str(i%100))
|
|
b=ModelB.objects.create(field1=str(i%100), field2=str(i%200))
|
|
c=ModelC.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
|
|
|
|
nModelA.objects.all().delete()
|
|
a=nModelA.objects.create(field1='A1')
|
|
b=nModelB.objects.create(field1='B1', field2='B2')
|
|
c=nModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
|
qs=ModelA.objects.raw("SELECT * from pexp_modela")
|
|
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_modela.field1, pexp_modelb.field2, pexp_modelc.field3
|
|
FROM pexp_modela
|
|
LEFT OUTER JOIN pexp_modelb
|
|
ON pexp_modela.id = pexp_modelb.modela_ptr_id
|
|
LEFT OUTER JOIN pexp_modelc
|
|
ON pexp_modelb.modela_ptr_id = pexp_modelc.modelb_ptr_id
|
|
WHERE pexp_modela.field1=%i
|
|
ORDER BY pexp_modela.id
|
|
""" % rnd.randint(0,100) )
|
|
#row=cursor.fetchone()
|
|
return
|
|
|
|
def poly_sql_query2():
|
|
cursor = connection.cursor()
|
|
cursor.execute("""
|
|
SELECT id, pexp_modela.field1
|
|
FROM pexp_modela
|
|
WHERE pexp_modela.field1=%i
|
|
ORDER BY pexp_modela.id
|
|
""" % rnd.randint(0,100) )
|
|
#row=cursor.fetchone()
|
|
return
|