Python 如何输出Django Admin生成的SQL

Python 如何输出Django Admin生成的SQL,python,django,django-orm,Python,Django,Django Orm,如何输出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

如何输出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。

我使用的是debug_工具栏:

看看吧。这是值得的。

我使用调试工具栏:


看看吧。这是值得的。

您只需在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'
        },

只需在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'
        },

哇,真漂亮。它确实显示了一个包含过滤器的查询。不幸的是,当我运行该查询时,我得到的结果仍然与我的管理员不匹配。非常令人费解。我唯一能想到的另一件事是admin缓存一个旧查询,但我禁用了所有缓存功能…哇,这真是太棒了。它确实显示了一个包含过滤器的查询。不幸的是,当我运行该查询时,我得到的结果仍然与我的管理员不匹配。非常令人费解。我唯一能想到的另一件事是admin缓存一个旧查询,但我禁用了所有缓存。。。