Django如何查看生成的SQL查询语句?

8

我有一个表单,需要将数据插入到数据库。当我处理该表单时,它会给我一个值错误,但是当我手动在数据库中尝试插入时,它可以正常工作。

为了调试这种情况,我想看看Django生成的失败查询。在调试网页上,我没有看到任何类似SQL查询的东西。

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

请建议。谢谢。

3个回答

17

使用日志记录怎么样?

您可以在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)

您可以查看原始查询字符串。


2
如果你使用PyCharm,在调试器中运行应用程序可以提供完整的上下文。设置断点,浏览应用程序到出现错误的位置,并获得类似以下截图(简单示例): enter image description here 以这种方式运行已经改变了我在使用Django时故障排除的方式。我猜其他IDE可能也有类似的功能。来自供应商的一些进一步的视频文档: https://www.youtube.com/watch?v=QJtWxm12Eo0 正如Jayground所建议的那样,日志记录可能是你最终会打开的东西; 非常好的建议。

谢谢AMG。我也会尝试使用PyCharm并学习如何操作。感谢您的分享,非常感激。 - learner

1

根据 Django 文档

connection.queries 包含所有的 SQL 语句 - INSERTs,UPDATES,SELECTs 等等。每次你的应用程序访问数据库时,查询将被记录下来。

因此,您可以运行以下操作来访问这些查询:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接