Tuesday, October 4, 2011

Django Admin generating thousands of useless SQL queries

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 '}

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/qrLu0jUcxmoJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment