简单的方法来运行“解释”上查询设置在Django(Easy way to run “explain”

2019-06-26 07:01发布

现在看来似乎应该很容易运行“解释”直接掉在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