Django Admin generating thousands of useless SQL queries

29 views
Skip to first unread message

Paulo VJ

unread,
Oct 4, 2011, 3:55:09 PM10/4/11
to django...@googlegroups.com
Hello everyone, I'm building a simple application that uses only django.admin as it's interface, but I found out using two tables for the name of a single one bringing the number of SQL queries from 70 to 20.000.

Am I doing this wrong?

class Categoria(models.Model):
  categoria = models.CharField(max_length=50)
  def __unicode__(self):
    return self.categoria

class Telefone(models.Model):
  numero = models.CharField(max_length=15, unique=True)
  categoria = models.ForeignKey(Categoria, null=True, blank=True)
  def __unicode__(self):
    return '%s - %s' % (self.numero,self.info)

The code about generates about 20.000 repeated queries. When Telefone.__unicode__ returns only self.numero, just 72 queries are made.
Example queries:

  • {'time': '0.003', 'sql': 'SELECT "claro_conta_telefone"."id", "claro_conta_telefone"."numero", "claro_conta_telefone"."info_id", "claro_conta_telefone"."local_id", "claro_conta_telefone"."categoria_id" FROM "claro_conta_telefone"'}
  • {'time': '0.001', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}
  • {'time': '0.000', 'sql': 'SELECT "claro_conta_categoria"."id", "claro_conta_categoria"."categoria" FROM "claro_conta_categoria" WHERE "claro_conta_categoria"."id" = 1 '}

Paulo VJ

unread,
Oct 4, 2011, 4:24:35 PM10/4/11
to django...@googlegroups.com
Well, I found out that even those 70 ones are mostly repeated queries for another ForeignKeyField of the model.
If I add another ForeignKey to be printed I get a whooping 43336 queries for showing 72 rows of data.
The correct queries ones seems to be limited at 6, tho.
Reply all
Reply to author
Forward
0 new messages