在过去的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