“简单的跑步方式”;解释;关于django中的查询集

“简单的跑步方式”;解释;关于django中的查询集,django,sql-execution-plan,Django,Sql Execution Plan,在Django中直接从查询集运行“explain”似乎很容易,但我看不到任何明显的操作方法,而且“explain”在文档中很难搜索 好吧,除了一个工具栏之外似乎什么都没有,所以我编写了自己的mixin,在我的查询集上提供了一个explain()方法: 从django.db导入连接 从django.db.models.query导入QuerySet 类QuerySetExplainMixin: def解释(自我): cursor=connections[self.db].cursor() curs

在Django中直接从查询集运行“explain”似乎很容易,但我看不到任何明显的操作方法,而且“explain”在文档中很难搜索

好吧,除了一个工具栏之外似乎什么都没有,所以我编写了自己的mixin,在我的查询集上提供了一个
explain()
方法:

从django.db导入连接
从django.db.models.query导入QuerySet
类QuerySetExplainMixin:
def解释(自我):
cursor=connections[self.db].cursor()
cursor.execute('解释%s'%str(self.query))
返回cursor.fetchall()
QuerySet.uuu碱基uuu+=(QuerySetExplainMixin,)

希望这对其他人有用。

只是对guidoism的答案稍加修改。这可以防止在原始查询中未正确转义参数而导致的
编程错误:语法错误位于或接近…
错误:

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,)
要使用,只需在查询集末尾调用explain(),例如:

print SomeModel.objects.filter(...).explain()

,在django 2.1.0及以上可用,现在是解释查询的官方方式。

请考虑打开Django项目的票。我很想看到这个内置的。看起来很有用,如果有一个如何实际使用它的例子,会更有用。如何使用它?你是在文件的底部包括这个还是。。。在哪里?这已经内置到Django了