我正在研究django-postgresql項目,並且需要查看django在數據庫上運行的每個查詢(以便我可以微調查詢)。有沒有辦法獲得這些查詢。 更新:我的開發環境是在Ubuntu linux上獲取django在postgresql上運行的所有查詢
4
A
回答
0
試試django debug toolbar。它會向您顯示通過請求執行的所有SQL。當某些事情執行太多查詢時,它變得非常慢。爲此,我一直在嘗試這個profiler。不過,我已經駛上了幾個項目,這個中間件:
try:
from cStringIO import StringIO
except ImportError:
import StringIO
from django.conf import settings
from django.db import connection
class DatabaseProfilerMiddleware(object):
def can(self, request):
return settings.DEBUG and 'dbprof' in request.GET
def process_response(self, request, response):
if self.can(request):
out = StringIO()
out.write('time sql\n')
total_time = 0
for query in reversed(sorted(connection.queries, key=lambda x: x['time'])):
total_time += float(query['time'])*1000
out.write('%s %s\n' % (query['time'], query['sql']))
response.content = '<pre style="white-space:pre-wrap">%d queries executed in %.3f seconds\n%s</pre>' \
% (len(connection.queries), total_time/1000, out.getvalue())
return response
只要到你感興趣的請求的相關網址,並添加dbprof
GET
參數,你會看到剖析輸出,而不是正常的迴應。
1
那麼,你可以設置pgsql服務器來記錄每個查詢。或者只是記錄慢的。查看postgresql.conf文件,它非常接近自我記錄。
1
退房這個問題(和兩個最上面的答案): django orm, how to view (or log) the executed query?
您還可以看看Djando documenation: https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running
希望這有助於 安東
1
你可以用這個裝飾一個請求處理程序或其他函數,它會在最後打印出合適的格式的總數。
from functools import wraps
from django.utils import termcolors
format_ok = termcolors.make_style(opts=('bold',), fg='green')
format_warning = termcolors.make_style(opts=('bold',), fg='yellow')
format_error = termcolors.make_style(opts=('bold',), fg='red')
try:
from pygments import highlight
from pygments.lexers import SqlLexer
from pygments.formatters import TerminalFormatter
pygments_sql_lexer = SqlLexer()
pygments_terminal_formatter = TerminalFormatter()
highlight_sql = lambda s: highlight(s, pygments_sql_lexer,
pygments_terminal_formatter)
except ImportError:
highlight_sql = lambda s: s
def debug_sql(f):
"""
Turn SQL statement debugging on for a test run.
"""
@wraps(f)
def wrapper(*a, **kw):
from django.conf import settings
from django.db import connection
try:
debug = settings.DEBUG
settings.DEBUG = True
connection.queries = []
return f(*a, **kw)
finally:
total_time = 0
for q in connection.queries:
fmt = format_ok
t = float(q['time'])
total_time += t
if t > 1:
fmt = format_error
elif t > 0.3:
fmt = format_warning
print '[%s] %s' % (fmt(q['time']), highlight_sql(q['sql']))
print "total time =", total_time
print "num queries =", len(connection.queries)
settings.DEBUG = debug
return wrapper
相關問題
- 1. Django:在所有查詢集對象上運行方法
- 2. 在PostgreSQL中獲取當前運行查詢的參數
- 3. 獲取運行PostgreSQL查詢的執行時間
- 4. Postgresql子查詢獲取多行
- 5. Django:在生成的聯合查詢上運行查詢
- 6. PostgreSQL和Django的查詢
- 7. 安排在greenplum數據庫上運行的postgreSQL查詢
- 8. 顯示在PostgreSQL上查詢JOINING值缺失的所有結果
- 9. 獲取從查詢列的列表,而運行在MySQL查詢
- 10. 如何在ORACLE中獲取所有執行的SQL查詢?
- 11. 獲取Lucene查詢的所有結果
- 12. 獲取所有的虛擬表中的行,當沒有查詢
- 13. django包含所有查詢
- 14. 獲取Postgresql查詢的性能
- 15. 如何獲取在Windows上運行的PostgreSQL PHP擴展?
- 16. 如何在CakePHP 3.2中獲取上次運行查詢?
- 17. Oracle查詢在運行時獲取所有COLUMN_NAMES,然後從每個行w.r.t中獲取值。每列
- 18. LINQ查詢獲取運行時錯誤
- 19. 獲取嘗試運行蜂巢查詢
- 20. 運行sparql查詢獲取浮點值
- 21. MySQL查詢獲取所有照片
- 22. 查詢不獲取所有記錄
- 23. SQL查詢不獲取所有內容
- 24. 獲取所有無可用查詢Oracle
- 25. 從查詢集獲取所有外鍵
- 26. 查詢不會獲取所有結果
- 27. 在django的查詢集上運行「explain」的簡單方法
- 28. 獲得來自ORM查詢所有外鍵在父表 - Django的
- 29. 如何用JDBC取消PostgreSQL中長時間運行的查詢?
- 30. 查看在Sql Server中的特定表上運行的所有查詢
這裏有個愚蠢的問題,但是如何在GET請求中添加「dbprof」?如果我剛剛解決這個問題,我會得到一個「404頁面未找到」的錯誤,Django會抱怨它無法在urls.py中找到該URL。你需要添加一些東西到urls.py? – William 2015-01-31 21:41:00
根據代碼,我認爲你必須在url結尾添加?dbprof = True – Omaraf 2016-02-21 19:36:43