2010-12-29 28 views
9

¿Cómo ves el SQL generado por Django para un DELETE?Ver las consultas SQL para Django queryset delete

Cuando se realiza una operación de SELECT en un conjunto de consultas, puede hacer esto:

>>> qs = Entry.objects.filter(date__gt='2010-06-01') 
>>> qs.query.as_sql() 
('SELECT ...) 

Pero no sé cómo obtener el SQL de lo que sucede cuando hago qs.delete().

Parece un poco más complicado porque Django "emulates the behavior of the SQL constraint ON DELETE CASCADE" al eliminar objetos.

(Antecedentes:. Tratando de depurar una IntegrityError generada por una restricción de clave externa cuando se elimina un modelo de objetos con subclases)

+1

Puede verificar el registro de errores de la base de datos :) –

+0

¿Ha resuelto el error IntegrityError? Estoy teniendo el mismo problema aquí. Dato curioso: myobject.delete() funciona desde "manage shell" pero falla desde la vista ??? – Sdra

Respuesta

13

Esto funciona bastante bien:

>>> from django.db import connection 
>>> connection.queries[:-10] 

le ocurrió las excepciones antes de añadir las consultas a connection.queries, pero son realmente presente.

+0

Debe aceptar su propia respuesta. Es la forma correcta de ver las consultas generadas. –

1

Usted podría intentar ejecutar django-debug-toolbar y ver las consultas de esa manera.

+0

Este enfoque no es muy general (por ejemplo, para los errores que ocurren durante las pruebas unitarias), pero gracias. – tcarobruce

Cuestiones relacionadas