【问题标题】:Can Django's ORM output the SQL query it is using?Django 的 ORM 可以输出它正在使用的 SQL 查询吗?
【发布时间】:2011-06-13 08:26:31
【问题描述】:

我知道您可以输出 SQL 来查看创建的表。 Django 是否可以输出用于任何查询的 sql,例如:

Protocols.objects.filter(active=False)

?我在文档中找不到这个,所以希望有人可以将它们指向我,如果事实上 Django 可以做到这一点。

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    查看 Django 常见问题解答:How can I see the raw SQL queries Django is running?:

    >>> from django.db import connection    
    >>> connection.queries = []
    >>> Protocols.objects.filter(active=False)
    >>> print connection.queries
    

    【讨论】:

    • 太好了,不知道我以前怎么没看到。
    • 这很好,但问题是一些查询可以被删除。您必须知道将说明放在哪里。如果我想在不知情的情况下查看所有查询?
    • 我的意思是,如果你只在一个地方找到输出,有时你不能看到所有的 SQL 指令。
    • @sergzach:所以.. 找到你需要的输出?
    • 更新:除非您需要完整的 SQL 日志,否则您可以检查数据库日志、django.db Python 日志(在 DEBUG 模式下)或使用将 SQL 记录到控制台的开发服务器(我不'不记得它在哪个插件中)
    【解决方案2】:

    是的,它可以。你需要确保你的设置文件中有DEBUG=True

    您可以看到...执行了哪些 sql 查询

    >>> from django.db import connection
    >>> connection.queries
    

    您显然需要执行一些查询才能在此处看到它们。

    要查看交付特定 QuerySet 执行了什么操作,您可以执行以下操作

    str(MyModel.objects.filter(myvar__gte=15).query)
    

    这里有记录 http://docs.djangoproject.com/en/dev/faq/models/

    【讨论】:

      【解决方案3】:

      我发现Django debug toolbar 非常宝贵。还有 .as_sql() 用于在代码中显示事物(请参阅 this SO post 以获取一个很好的注释)

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        相关资源
        最近更新 更多