【问题标题】:How to output SQL generated by Django Admin如何输出 Django Admin 生成的 SQL
【发布时间】:2014-05-24 19:21:07
【问题描述】:

如何输出 Django 管理员生成的 SQL 以查询 dhangelist 页面的结果?我尝试通过以下方式覆盖queryset()

def queryset(self, *args, **kwargs):
    qs = super(MyAdmin, self).queryset(*args, **kwargs)
    print 'sql:',qs.query
    return qs

但即使我正在浏览 /admin/myapp/mymodel/?segment=123&date=2012-1-1,这也显示了查询:

sql: SELECT myapp_mymodel.id, myapp_mymodel.segment, myapp_mymodel.start_date
FROM myapp_mymodel ORDER BY myapp_mymodel.start_date ASC

请注意我在 URL 中指定的任何过滤器完全没有。

我正在尝试调试一个奇怪的问题,如果我在 SQL 中手动查询表,我会看到一个结果,但 Django 的管理员显示的是完全不同的东西。我怀疑 Django 中存在导致生成错误 SQL 的错误,但我需要查看 SQL 以确认这是问题所在。

我正在使用 Django 1.5。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    您可以简单地在 settings.py 中设置此日志记录配置,以便在控制台上打印所有 SQL 查询

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'filters': {
            'require_debug_false': {
                '()': 'django.utils.log.RequireDebugFalse'
            }
        },
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'filters': ['require_debug_false'],
                'class': 'django.utils.log.AdminEmailHandler'
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
            }
        },
        'loggers': {
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': True,
            },
            'django.db.backends': {
                'handlers': ['console'],
                'level': 'DEBUG'
            },
        }
    }
    

    这是负责打印的部分

           'django.db.backends': {
                'handlers': ['console'],
                'level': 'DEBUG'
            },
    

    【讨论】:

      【解决方案2】:

      我使用 debug_toolbar:https://pypi.python.org/pypi/django-debug-toolbar

      检查一下。这是值得的。

      【讨论】:

      • 哇,这真是太棒了。它确实显示了一个包含过滤器的查询。不幸的是,当我运行该查询时,我得到的结果仍然与我的管理员不匹配。非常令人费解。我唯一能想到的另一件事是管理员正在缓存旧查询,但我已禁用所有缓存...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2017-07-13
      • 2021-02-01
      • 2014-10-10
      • 2011-02-24
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多