Django怎么看生成的SQL查询?

时间:2016-12-30 01:46:59

标签: python django

我有一个获取数据的表单,应该将其插入数据库。当我处理该表单时,它给我一个值错误,但是当我去数据库并尝试手动插入它时它工作正常。

为了调试这种情况,我想看看Django正在生成哪些查询失败。在调试网页上,我没有看到像SQL查询这样的东西。

如何查看Django生成的实际查询?

请指教。 感谢。

3 个答案:

答案 0 :(得分:13)

如何使用日志记录?

你可以在settings.py

中添加它
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

您可以在任何views.py

中添加此内容
import logging

l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())

在您的控制台中,您可以检查SQL查询。

另一种方式

去shell

python manage.py shell

>>from yourmodel import Example
>>queryset = Example.objects.all()
>>print(queryset.query)

你可以看到原始查询字符串。

答案 1 :(得分:1)

如果您碰巧使用PyCharm,在调试器中运行您的应用程序将为您提供完整的上下文。设置一个断点,然后在你的应用程序中浏览到你遇到错误的位置并得到一个像(一些简单的例子)的屏幕: enter image description here

以这种方式运行改变了我在使用Django时进行故障排除的方式。我怀疑其他IDE可能有类似的功能。供应商提供的有关该流程的更多视频文档: https://www.youtube.com/watch?v=QJtWxm12Eo0

正如Jayground建议的那样,记录可能是你最终会转向的东西;很好的建议。

答案 2 :(得分:0)

根据django docs

<块引用>

connection.queries 包括所有 SQL 语句——插入、更新、选择等。每次您的应用访问数据库时,都会记录查询。

因此您可以通过运行来访问这些查询

from django.db import connection
print(connection.queries)