Sembra che sia facile eseguire "explain" direttamente da un set di query in Django, ma non vedo nulla di ovvio per come farlo, e "spiegare" è una cosa difficile da cercare nei documenti.Un modo semplice per eseguire "explain" sui set di query in django
19
A
risposta
23
Beh, sembra che ci sia niente là fuori tranne una barra degli strumenti così ho scritto il mio mixin di darmi un metodo explain()
sui miei set di query:
from django.db import connections
from django.db.models.query import QuerySet
class QuerySetExplainMixin:
def explain(self):
cursor = connections[self.db].cursor()
cursor.execute('explain %s' % str(self.query))
return cursor.fetchall()
QuerySet.__bases__ += (QuerySetExplainMixin,)
Speriamo che questo sia utile per gli altri.
11
Solo una leggera modifica alla risposta del guidoism. Questo impedisce di ottenere un errore di ProgrammingError: syntax error at or near ...
causato dai parametri non essere correttamente sfuggiti nella query prima:
from django.db import connections
from django.db.models.query import QuerySet
class QuerySetExplainMixin:
def explain(self):
cursor = connections[self.db].cursor()
query, params = self.query.sql_with_params()
cursor.execute('explain %s' % query, params)
return '\n'.join(r[0] for r in cursor.fetchall())
QuerySet.__bases__ += (QuerySetExplainMixin,)
da usare, basta richiamare spiegare() alla fine del set di query, ad esempio:
print SomeModel.objects.filter(...).explain()
prega prendere in considerazione l'apertura di un biglietto per il progetto Django. Mi piacerebbe vedere questo builtin. –
Sembra utile, lo sarebbe ancora di più con un esempio di come effettivamente usarlo. – szeitlin
Grazie! È delizioso! – mkoistinen