似乎應該很容易在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