【发布时间】:2017-05-14 08:40:40
【问题描述】:
我有一个表单,它接收数据并应该将其插入数据库。当我处理该表单时,它给了我一个值错误,但是当我转到数据库并尝试手动插入它时,它工作正常。
为了调试这种情况,我想看看 Django 正在生成哪些查询失败。在调试网页上,我没有看到任何类似 SQL 查询的内容。
如何查看 Django 生成的实际查询?
请指教。 谢谢。
【问题讨论】:
我有一个表单,它接收数据并应该将其插入数据库。当我处理该表单时,它给了我一个值错误,但是当我转到数据库并尝试手动插入它时,它工作正常。
为了调试这种情况,我想看看 Django 正在生成哪些查询失败。在调试网页上,我没有看到任何类似 SQL 查询的内容。
如何查看 Django 生成的实际查询?
请指教。 谢谢。
【问题讨论】:
如何使用日志记录?
你可以在 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 查询。
另一种方式
去壳
python manage.py shell
>>from yourmodel import Example
>>queryset = Example.objects.all()
>>print(queryset.query)
您可以看到原始查询字符串。
【讨论】:
如果您碰巧使用 PyCharm,在调试器中运行您的应用程序会为您提供完整的上下文。设置一个断点,然后在您的应用程序中浏览到您遇到错误的点并获得如下屏幕(简单示例):
以这种方式运行改变了我在使用 Django 时进行故障排除的方式。我怀疑其他 IDE 可能具有类似的功能。供应商提供的有关该过程的更多视频文档位于: https://www.youtube.com/watch?v=QJtWxm12Eo0
正如 Jayground 所建议的那样,无论如何您最终都可能会启用日志记录;很好的建议。
【讨论】:
connection.queries 包括所有 SQL 语句 - INSERTs、UPDATES、SELECTs 等。每次您的应用访问数据库时,都会记录查询。
所以你可以通过运行来访问这些查询
from django.db import connection
print(connection.queries)
【讨论】: