Django如何在manage shell中查看查询

时间:2010-10-07 05:24:11

标签: django

如何从管理shell界面

中查看我的django查询

我尝试过使用它,但是给了我通过django服务器的查询

from django.db import connection
connection.queries()
我已经在某个地方见过,记不起来了?

4 个答案:

答案 0 :(得分:8)

  

Django如何在manage shell中查看查询

有两种方法可以在 shell 中查看查询。首先,如果您使用的是查询集,则可以使用查询集的query属性。例如,

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

第二,当查询不立即可见时。对于例如当您使用update()更新查询集时。在这种情况下,您可以:

from django.db import connection
MyModel.objects.all().update(foo = 'bar')
print connection.queries 
# print connection.queries[-1] # if you want to see only the last query
  

我尝试过使用它,但是给了我通过django服务器的查询

我不明白你的意思是“给我通过Django服务器的查询”。您是否在运行应用程序时尝试查看查询?在这种情况下,请使用django-debug-toolbar引用的snippet@rubayeet

答案 1 :(得分:3)

最简单的方法是使用django extensions。您可以使用

进行安装
$ pip install django-extensions

使用

启动shell
./manage.py shell_plus --print-sql

运行查询

In [1]: Book.objects.all()
Out[1]: SELECT "book_book"."id", "book_book"."name", "book_book"."author_id" FROM "book_book" LIMIT 21

Execution time: 0.087548s [Database: default]

<QuerySet [<Book: The Stranger>, <Book: Atlas Shrugged>]>

如果您不希望每次都附加--print-sql,则可以在django设置中设置

SHELL_PLUS_PRINT_SQL = True

另一种方法是启用数据库查询的日志记录。

LOGGING = {
    'version': 1,
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'filters': ['require_debug_true'],
        }
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
}

将其添加到您的设置中,然后重新启动shell以查看SQL查询。

答案 2 :(得分:1)

您可以打印出个人查询的sql,如下所示:

your_query = YourModel.objects.all()
print your_query.query

这就是你需要的吗?

答案 3 :(得分:0)

我使用this Django code snippet列出了渲染模板中视图中的所有查询。很有用。