/pexp/management/commands/p2cmd.py

https://bitbucket.org/bconstantin/django_polymorphic/ · Python · 110 lines · 87 code · 16 blank · 7 comment · 7 complexity · de370056c22d03e8060a8c58b76ac0f5 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. """
  3. This module is a scratchpad for general development, testing & debugging
  4. Well, even more so than pcmd.py. You best ignore p2cmd.py.
  5. """
  6. import uuid
  7. from django.core.management.base import NoArgsCommand
  8. from django.db.models import connection
  9. from pprint import pprint
  10. import settings
  11. import time,sys
  12. from pexp.models import *
  13. def reset_queries():
  14. connection.queries=[]
  15. def show_queries():
  16. print; print 'QUERIES:',len(connection.queries); pprint(connection.queries); print; connection.queries=[]
  17. def print_timing(func, message='', iterations=1):
  18. def wrapper(*arg):
  19. results=[]
  20. reset_queries()
  21. for i in xrange(iterations):
  22. t1 = time.time()
  23. x = func(*arg)
  24. t2 = time.time()
  25. results.append((t2-t1)*1000.0)
  26. res_sum=0
  27. for r in results: res_sum +=r
  28. median = res_sum / len(results)
  29. print '%s%-19s: %.4f ms, %i queries (%i times)' % (
  30. message,func.func_name,
  31. res_sum,
  32. len(connection.queries),
  33. iterations
  34. )
  35. sys.stdout.flush()
  36. return wrapper
  37. class Command(NoArgsCommand):
  38. help = ""
  39. def handle_noargs(self, **options):
  40. print 'polycmd - sqlite test db is stored in:',settings.SQLITE_DB_PATH
  41. print
  42. if False:
  43. ModelA.objects.all().delete()
  44. a=ModelA.objects.create(field1='A1')
  45. b=ModelB.objects.create(field1='B1', field2='B2')
  46. c=ModelC.objects.create(field1='C1', field2='C2', field3='C3')
  47. reset_queries()
  48. print ModelC.base_objects.all();
  49. show_queries()
  50. if False:
  51. ModelA.objects.all().delete()
  52. for i in xrange(1000):
  53. a=ModelA.objects.create(field1=str(i%100))
  54. b=ModelB.objects.create(field1=str(i%100), field2=str(i%200))
  55. c=ModelC.objects.create(field1=str(i%100), field2=str(i%200), field3=str(i%300))
  56. if i%100==0: print i
  57. f=print_timing(poly_sql_query,iterations=1000)
  58. f()
  59. f=print_timing(poly_sql_query2,iterations=1000)
  60. f()
  61. return
  62. nModelA.objects.all().delete()
  63. a=nModelA.objects.create(field1='A1')
  64. b=nModelB.objects.create(field1='B1', field2='B2')
  65. c=nModelC.objects.create(field1='C1', field2='C2', field3='C3')
  66. qs=ModelA.objects.raw("SELECT * from pexp_modela")
  67. for o in list(qs): print o
  68. from django.db import connection, transaction
  69. from random import Random
  70. rnd=Random()
  71. def poly_sql_query():
  72. cursor = connection.cursor()
  73. cursor.execute("""
  74. SELECT id, pexp_modela.field1, pexp_modelb.field2, pexp_modelc.field3
  75. FROM pexp_modela
  76. LEFT OUTER JOIN pexp_modelb
  77. ON pexp_modela.id = pexp_modelb.modela_ptr_id
  78. LEFT OUTER JOIN pexp_modelc
  79. ON pexp_modelb.modela_ptr_id = pexp_modelc.modelb_ptr_id
  80. WHERE pexp_modela.field1=%i
  81. ORDER BY pexp_modela.id
  82. """ % rnd.randint(0,100) )
  83. #row=cursor.fetchone()
  84. return
  85. def poly_sql_query2():
  86. cursor = connection.cursor()
  87. cursor.execute("""
  88. SELECT id, pexp_modela.field1
  89. FROM pexp_modela
  90. WHERE pexp_modela.field1=%i
  91. ORDER BY pexp_modela.id
  92. """ % rnd.randint(0,100) )
  93. #row=cursor.fetchone()
  94. return