2010-09-16 90 views

回答

1

當然可以。在命令行中/外殼:

queryset = Model.objects.filter() 
print queryset.query 

變2:

from django.db import connection  
queryset = Model.objects.filter() 
queryset[0] # This variant needs the queryset to be accessed. Hence. 
print connection.queries 

如果你要打印用於渲染頁面,那麼你可以使用工具欄作爲@Meitham suggested或使用該Django snippet查詢。

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 
相關問題