2010-08-13 67 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

相关问题