【问题标题】:How do I print the queries executed by django .save() method?如何打印 django .save() 方法执行的查询?
【发布时间】:2012-04-12 04:15:58
【问题描述】:

我想看看在 django 的模型 .save() 方法上执行了哪些查询。由于我在生产环境中,因此无法使用 Django Toolbar。

【问题讨论】:

    标签: sql django


    【解决方案1】:

    根据 Sid 的回答和这个 sn-p (http://djangosn-ps.org/sn-ps/1973/) 我已经用这个替换了 postgres db-wrapper:

    # base.py
    from django.db.backends.postgresql_psycopg2.base import *
    
    #http://djangosnippets.org/snippets/1973/
    class DatabaseWrapper(DatabaseWrapper):
    
        def __init__(self, *args, **kwargs):
            super(DatabaseWrapper, self).__init__(*args, **kwargs)
            self.use_debug_cursor = True
    

    然后在settings.py 中,使用'ENGINE': 'my_project.db_backend',而不是默认后端(在我的情况下,'ENGINE': 'django.db.backends.postgresql_psycopg2'

    现在connection.queries 将包含您的所有查询!

    【讨论】:

      【解决方案2】:

      有两种方式:

      1. https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running

      2. 在 Django 1.3 及更高版本中,您可以使用日志记录,我相信这会将您的 sql 查询转储到日志中。 https://docs.djangoproject.com/en/dev/topics/logging/

      如果没有 DEBUG=True,似乎没有直接简单的方法。这是我能找到的最接近的:Logging Django SQL queries with DEBUG set to False

      【讨论】:

      • 对,但是这个问题专门针对 .save() 和 DEBUG=True 不是一个选项,因为我无法在 DEBUG 中设置我的实时服务器。我也无法在调试环境中重现我的问题。
      • 似乎没有 DEBUG=True 的直接简单的方法。这是我能找到的最接近的:stackoverflow.com/questions/7181511/…
      • 也许你可以将你的数据库设置为log queries(注意:减慢速度)
      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2011-12-30
      • 2020-10-04
      • 1970-01-01
      • 2020-04-22
      • 2018-09-23
      相关资源
      最近更新 更多