2012-08-29 71 views
0

對於Django中的Queryset,我們可以調用它的方法.query獲取原始sql。Django ORM「get」翻譯爲SQL

例如,

queryset = AModel.objects.all() 
print queryset.query 

輸出可能是:選擇 「ID」,... FROM 「AMODEL」

但對於通過 「搞定」 檢索對象,比如說,

item = AModel.objects.get(id = 100) 

如何獲得等效的原始sql?注意:該項目可能是None。

回答

3

安裝「Django的調試工具欄」的item = AModel.objects.get(id = 100)等於

items = AModel.objects.filter(id = 100) 
if len(items) == 1: 
    return items[0] 
else: 
    raise exception 

因此,執行的查詢等於AModel.objects.filter(id = 100)

此外,您可以檢查connection.queries的最新項目

from django.db import connection # use connections for non-default dbs 
print connection.queries[-1] 

而且,正如FoxMaSk所說,安裝django-debug-toolbar並在您的瀏覽器中享受它。

1

如果它只是用於調試目的,你可以使用它可以通過

pip install django-debug-toolbar 
2

這是相同的SQL,只是與WHERE id=100子句結尾。

然而,FWIW,如果一個filter足夠具體,只返回一個結果,它與get產生的SQL相同,唯一的區別是在Python那一點上,例如,

AModel.objects.get(id=100) 

是一樣的:

AModel.objects.filter(id=100).get() 

所以,你可以簡單地查詢AModel.objects.filter(id=100)然後用queryset.query這一點。