2010-10-07 35 views
6

我怎麼能看到我的Django的查詢管理從shell界面Django中如何查看查詢在管理外殼

我一直在使用這種嘗試,但讓我穿過Django的服務器

from django.db import connection 
connection.queries() 

我查詢已經看到它的某個地方,不記得在哪裏?

+1

[Django:show/log來自python shell的ORM sql調用]的可能重複(http:// stackoverflow。com/questions/2314920/django-show-log-orm-sql-calls-from-python-shell) – tyrion 2013-12-04 12:58:53

回答

5

Django的我如何查看查詢管理外殼

有兩種方法在外殼查看查詢。首先,如果您使用查詢集,則可以使用查詢集的query屬性。對於例如

qs = MyModel.objects.all() 
print qs.query 

其次當查詢不可見時立即。對於例如當您使用update()更新查詢集時。在這種情況下,您可以:

from django.db import connection 
MyModel.objects.all().update(foo = 'bar') 
print connection.queries 
# print connection.queries[-1] # if you want to see only the last query 

我一直在使用這種嘗試,但讓我穿過Django的服務器

我不明白你的意思是「給我查詢的查詢通過Django服務器「。您是否在運行應用程序時試圖查看查詢?在這種情況下,請使用@rubayeet所指的django-debug-toolbarsnippet

+0

好的,我正在做的是將查詢集分配給一個變量,例如cur = Entry.objects.all()。但現在好了。謝謝 – gath 2010-10-07 08:52:57

1

可以打印出SQL像這樣單個查詢:

your_query = YourModel.objects.all() 
print your_query.query 

這就是你需要什麼?

+0

它是否顯示原始SQl語句? – gath 2010-10-07 08:46:54

+0

@gath:是的。 – sdolan 2010-10-07 17:13:28

2

最簡單的方法是使用django extensions。你可以用

$ pip install django-extensions 
安裝

./manage.py shell_plus --print-sql 

運行開始你的shell查詢

In [1]: Book.objects.all() 
Out[1]: SELECT "book_book"."id", "book_book"."name", "book_book"."author_id" FROM "book_book" LIMIT 21 

Execution time: 0.087548s [Database: default] 

<QuerySet [<Book: The Stranger>, <Book: Atlas Shrugged>]> 

如果你不想每次都追加--print-sql,在你的Django設置,你可以設置

SHELL_PLUS_PRINT_SQL = True 

另一種方法是啓用數據庫查詢的日誌記錄。

LOGGING = { 
    'version': 1, 
    'loggers': { 
     'django.db.backends': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
     } 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'filters': ['require_debug_true'], 
     } 
    }, 
    'filters': { 
     'require_debug_true': { 
      '()': 'django.utils.log.RequireDebugTrue', 
     } 
    }, 
} 

添加到您的設置並重新啓動您的外殼看到SQL查詢。