El problema
La verdad que en el poco tiempo que llevo jugando con Django no he tenido grandes problemas con código SQL generado automáticamente por el ORM de Django, y cuando tuve algun inconveniente el mensaje de error fue lo suficientemente descriptivo como para resolverlo sin mas.
Esto no me hace creer que no pueden aparecer problemas un poco mas complejos y que no estaría de mas tener un buen registro de todo lo que el ORM esta ejecutando sobre el motor relacional. Tiempo atrás, trabajando con Delphi/DataSnap procuraba guardar toda consulta generada en un tabla para posterior analisis/auditoria. ¿Como hacer los mismo en Django?
La solución
Yo no he pedido hacer en django que las consultas SQL se persistan en una tabla de la base de datos, pero al menos si que se guarden en un archivo del proyecto.
Tan simple como agregar la siguiente entrada en el settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
'file': {
'level': 'DEBUG',
#'class': 'logging.FileHandler',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs/django.log'), #'/path/to/django/debug.log',
'maxBytes': 16745#16777216, # 16megabytes
#'formatter': 'verbose'
},
},
'loggers': {
'django.db.backends': {
'handlers': ['file'],
'level': 'DEBUG',
},
}
}
Revisar tener la carpeta en el proyecto, en mi caso llamada logs.
Algunas pruebas
Ahora para verificar vamos a realizar algunas pruebas por consola, si aun no sabes como hacerlo en eclipse te recomiendo un post anterior Django: Testeo de escritorio sobre consola de eclipse.
Desde ORM:
Plato.objects.all()
[<Plato: Flan Casero>, <Plato: Omelette>, <Plato: Milanesa de soja>, <Plato: Tortilla>]
Consulta SQL:
(0.001)
SELECT "djSisitia_plato"."id", "djSisitia_plato"."descripcion", "djSisitia_plato"."tipo_id", "djSisitia_plato"."imagen"
FROM "djSisitia_plato" LIMIT 21; args=()
Plato.objects.all().filter(tipo__descripcion="Postre")
(0.000)
SELECT "djSisitia_plato"."id", "djSisitia_plato"."descripcion", "djSisitia_plato"."tipo_id", "djSisitia_plato"."imagen"
FROM "djSisitia_plato" INNER JOIN "djSisitia_tipoplato" ON ("djSisitia_plato"."tipo_id" = "djSisitia_tipoplato"."id")
WHERE "djSisitia_tipoplato"."descripcion" = 'Postre'
LIMIT 21; args=('Postre',)
No hay comentarios:
Publicar un comentario