gui*_*ism 26 django sql-execution-plan
看起来直接从Django中的查询集运行"解释"应该很容易,但我没有看到任何明显的如何做到这一点,并且"解释"在文档中搜索是一件困难的事情.
gui*_*ism 29
好吧,除了工具栏之外似乎什么都没有,所以我编写了自己的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,)
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有用.
小智 15
只是对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,)
Run Code Online (Sandbox Code Playgroud)
要使用,只需在查询集的末尾调用explain(),例如:
print SomeModel.objects.filter(...).explain()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6688 次 |
| 最近记录: |