现在看来似乎应该很容易运行“解释”直接掉在Django一个QuerySet的,但我不明白怎么做任何事情明显,“解释”是一个很难的文档搜索的东西。
Answer 1:
好了,似乎有什么在那里只是一个工具栏,所以我写了我自己的mixin给我一个explain()
在我的查询集方法:
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,)
希望这是对别人有用。
Answer 2:
只是轻微修改guidoism的答案。 这可防止得到一个ProgrammingError: syntax error at or near ...
造成不正确的原始查询逃过参数错误:
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,)
使用时,只需调用解释()在你的查询集,如结束:
print SomeModel.objects.filter(...).explain()
Answer 3:
QuerySet.explain()
在Django 2.1.0及更高版本,现在解释查询的官方途径。
文章来源: Easy way to run “explain” on query sets in django