在Django 1.2.1中如何获取类似旧版.as_sql的功能?

3 投票
1 回答
1494 浏览
提问于 2025-04-16 02:44

在以前的django版本中,你可以创建一个查询集,然后用.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 %}

这能让我看到查询的完整版本(包括选择的字段)

我的问题是,如何在命令行中获取这个完整的版本呢?

1 个回答

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

应该可以解决这个问题,就像这里展示的那样

编辑:

我刚试了一下,还是遇到同样的错误。

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

这应该能给你想要的结果(:

撰写回答