2010-08-13 64 views
3

在過去的django版本中,您可以構造一個查詢集,然後對其執行.as_sql()以查找最終查詢。在django 1.2.1我怎麼能得到像舊的.as_sql的東西?

在Django 1.2.1中有一個函數._as_sql()它返回類似的東西,但不一樣。

在過去的版本:

qs=Model.objects.all() 
qs.as_sql() ====> 

SELECT `model_table.id`, `model_table.name`, `model_table.size` from model_table 

這說明了我很多的信息。

但是,如果我嘗試在Django 1.2.1

from django.db import connections 
con=connections['default'] 

qs=Model.objects.all() 
qs._as_sql(con) ====> 

SELECT U0.`id` from model_table U0 

這並不表明我真的被選擇哪些領域。我知道這個信息是可用的地方,因爲在模板中,我還可以做的:

{% for q in sql_queries %} 
    {{q.time}} - {{q.sql}} 
{% endfor %} 

這說明我的完整版本的查詢(包括選擇的字段)

我的問題是,我怎麼能在shell中獲得這個完整版本?

+0

如何從'model_table U0'選擇U0.'id」不顯示正在選擇哪些領域model_table.id被選擇。如果是相同的。三個字段作爲你的第一個查詢被使用,它看起來像'SELECT U0.'id',U0.'name',U0.'size'from model_table U0'。 – Andrew 2010-08-13 06:52:14

+0

我不認爲僅僅選擇id就夠了。後面實際發生的是全部信息正在被選中。 例如, qs = Model.objects.select_related()。all() qs._as_sql(con)=====> 從model_table中選擇U0.'id' U0 顯然這不是select_related的預期功能吧? – fastmultiplication 2010-08-13 06:57:51

+0

我需要它的原因是因爲我試圖調試延遲/只與註釋相結合的查詢,並且唯一的我可以看到django生成的sql是新的'select id'類型的東西,而實際上並沒有看到它試圖選擇哪些字段。 – fastmultiplication 2010-08-13 07:01:53

回答

4
qs=Model.objects.all() 
qs.query.as_sql() 

應該做的工作as it is shown here

編輯:

我只是嘗試,並得到了同樣的錯誤。

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

這必須給你想要的東西(?:

+0

你在什麼版本的Django? in 1.2.1,your code generated 'Query'object has no attribute'as_sql' – fastmultiplication 2010-08-13 06:56:05

+0

抱歉,未經測試的代碼。檢查我的編輯。 – FallenAngel 2010-08-13 07:05:20

+0

如果此解決方案符合您的需求,請將其標記爲已回答 – FallenAngel 2010-08-13 07:11:35

相關問題