在過去的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中獲得這個完整版本?
如何從'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
我不認爲僅僅選擇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
我需要它的原因是因爲我試圖調試延遲/只與註釋相結合的查詢,並且唯一的我可以看到django生成的sql是新的'select id'類型的東西,而實際上並沒有看到它試圖選擇哪些字段。 – fastmultiplication 2010-08-13 07:01:53