【问题标题】:Django how to see generated SQL query?Django如何查看生成的SQL查询?
【发布时间】:2017-05-14 08:40:40
【问题描述】:

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

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

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

请指教。 谢谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如何使用日志记录?

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

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

    【讨论】:

      【解决方案2】:

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

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

      正如 Jayground 所建议的那样,无论如何您最终都可能会启用日志记录;很好的建议。

      【讨论】:

      • 感谢 AMG。我也会尝试使用 pycharm 并学习如何操作。谢谢你分享这个。真的很感激。
      【解决方案3】:

      根据django docs

      connection.queries 包括所有 SQL 语句 - INSERTs、UPDATES、SELECTs 等。每次您的应用访问数据库时,都会记录查询。

      所以你可以通过运行来访问这些查询

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

      【讨论】:

        猜你喜欢
        • 2011-09-05
        • 2017-12-16
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多