我有一个获取数据的表单,应该将其插入数据库。当我处理该表单时,它给我一个值错误,但是当我去数据库并尝试手动插入它时它工作正常。
为了调试这种情况,我想看看Django正在生成哪些查询失败。在调试网页上,我没有看到像SQL查询这样的东西。
如何查看Django生成的实际查询?
请指教。 感谢。
答案 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,在调试器中运行您的应用程序将为您提供完整的上下文。设置一个断点,然后在你的应用程序中浏览到你遇到错误的位置并得到一个像(一些简单的例子)的屏幕:
以这种方式运行改变了我在使用Django时进行故障排除的方式。我怀疑其他IDE可能有类似的功能。供应商提供的有关该流程的更多视频文档: https://www.youtube.com/watch?v=QJtWxm12Eo0
正如Jayground建议的那样,记录可能是你最终会转向的东西;很好的建议。
答案 2 :(得分:0)
connection.queries 包括所有 SQL 语句——插入、更新、选择等。每次您的应用访问数据库时,都会记录查询。
因此您可以通过运行来访问这些查询
from django.db import connection
print(connection.queries)