每个include / extends的Django SQL查询

时间:2013-02-04 10:58:05

标签: sql django

我正在使用Django来实现工程管理系统。我在某处做了一些非常错误的事情,并且我的SQL查询计数在某些页面上非常高。

例如,我在一个页面中获得了95到98个SQL查询,这是一个简单的ListView。所有查询都是相同的:

SELECT * FROM "syncoor_codification" LIMIT 21

他们总是返回相同的对象。我怀疑查询是由我的模型的get_queryset()函数触发的。

如果我使用Django调试工具栏,我可以看到查询是在模板内触发的,例如:

{% extends 'syncoor/base.html' %}
{% extends 'syncoor/docs/base.html' %}
{% extends 'syncoor/docs/codifications/base.html' %}
{% include 'syncoor/js/jsp.js' %}

我怎样才能摆脱这些额外的开销?

编辑:这是截图:

Query triggered for CSS file

2 个答案:

答案 0 :(得分:1)

在您发布的图片中,堆栈跟踪显示了两个值得注意的事项。

  1. SQL调用正在与django-debug-toolbar相关联的信号处理程序中执行,特别是TEMPLATE面板。

  2. SQL调用将其limit限制子句设置为REPR_OUTPUT_SIZE,表示模板面板正在尝试呈现查询集的表示。

  3. 这让我相信你已经传递了一个函数或惰性对象,它在某个时刻将一个新的查询集返回到上下文中,而这个对象正由模板面板进行评估。看看你是否可以在模板面板的上下文中找到一堆实体对象。

    要确认,请尝试设置此类设置。

    DEBUG_TOOLBAR_PANELS = (
        'debug_toolbar.panels.version.VersionDebugPanel',
        'debug_toolbar.panels.timer.TimerDebugPanel',
        'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
        'debug_toolbar.panels.headers.HeaderDebugPanel',
        'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
       # 'debug_toolbar.panels.template.TemplateDebugPanel',
        'debug_toolbar.panels.sql.SQLDebugPanel',
        'debug_toolbar.panels.signals.SignalDebugPanel',
        'debug_toolbar.panels.logger.LoggingPanel',
    )
    

答案 1 :(得分:-1)

看起来你的base.html模板中有一些循环正在运行数据库。这就是继承这些模板的原因是生成查询。没有看到模板本身就很难说出确切的问题是什么,但这肯定是你会找到答案的地方。