似乎应该很容易在Django的查询集之外直接运行“explain”,但我没有看到任何明显的做法,以及“解释”在文档中搜索是一件困难的事情。在django的查询集上运行“explain”的简单方法
19
A
回答
23
好了,似乎有什么在那里只是一个工具栏,所以我写了我自己的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,)
希望这是对别人有用。
11
只是对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()
相关问题
- 1. Django:在所有查询集对象上运行方法
- 2. ZendFramework - 查找正在运行的查询 - 更简单的方法
- 3. Django unittesting:model.all()查询集在单独线程中运行的方法是空的
- 4. 简单的方法查询
- 5. ActiveRecord :: Relation#explain总是运行查询
- 6. 简单查询未运行
- 7. 简单的Django查询
- 8. 在查询集上运行的Django模型
- 9. 在Django的查询集上运行函数
- 10. 从Django的查询集中消除对象的最简单方法
- 11. 有没有办法逐行检查简单的Django查询?
- 12. 在查询生成器上运行收集方法
- 13. 简单的方法 - Django的
- 14. 简单的Mysql查询运行缓慢
- 15. 如何在Django中的单个查询集上进行聚合?
- 16. 查询集上的Django smart_str
- 17. Django的查询集流行
- 18. 在Django App Engine上运行简单的Django搜索?
- 19. 无法在简单的表上执行简单的查询(超时)
- 20. 运行EXPLAIN对MySQL查询是给一个语法错误
- 21. Django查询查询集的模型类型的最佳方法
- 22. Django:在生成的联合查询上运行查询
- 23. 通过Django查询集上的values()方法访问ImageField的url
- 24. Django的查询集更新()在+ =方式
- 25. 运行jquery插件的简单方法
- 26. 在Windows上运行gtk#app的最简单方法
- 27. 在一个python文件上运行Sphinx的最简单方法
- 28. 在Mac上运行IIS的最简单方法是什么?
- 29. 在Win7或Win8上运行IE8有没有简单的方法?
- 30. LINQ上的简单查询
请考虑为django项目打开一张票。我很乐意看到这个内建。 – 2012-07-14 00:39:57
看起来很有用,如果真正使用它的例子更是如此。 – szeitlin 2016-03-15 21:58:46
谢谢!这个好吃! – mkoistinen 2017-09-09 16:17:45