【问题标题】:Django Query Best PracticeDjango 查询最佳实践
【发布时间】:2018-03-06 18:18:27
【问题描述】:

想知道一些 Django 查询性能/最佳实践。据我了解,QuerySets 是"lazy",正如文档所述,并且下面的三个查询在某个时间点被实际评估之前不会运行。这是一个正确的理解吗?下面的 sn-p 是针对同一个表查询同一字段的三个不同过滤器值的合理方法吗?

    # General Education
    general_education_assignments = FTEAssignment.objects.filter(
        group_name='General Education'
    )
    # Specials
    specials_assignments = FTEAssignment.objects.filter(
        group_name='Specials'
    )
    # Dual
    dual_assignments = FTEAssignment.objects.filter(
        group_name='Dual Language'
    )

除了我对以上内容的理解是否正确之外,我还想知道以下内容是否更有效(我认为不会)?另外,如果上面或下面的任何一个在风格上更适合 Django 或更“pythonic”?

    # Get all assignments then filter
    fte_assignments = FTEAssignment.objects.all()
    # General Education
    general_education_assignments = fte_assignments.filter(
        group_name='General Education')
    # Specials
    specials_assignments = fte_assignments.filter(group_name='Specials')
    # Dual
    dual_assignments = fte_assignments.filter(group_name='Dual Language')

谢谢!

【问题讨论】:

标签: python django django-models


【解决方案1】:

您在这里的理解是正确的。第二个示例在性能和“幕后”发生的事情方面的工作方式相同。通常,当您将许多过滤器和排除项链接在一起并且不想重复自己时,您会看到类似于第二个示例的代码结构。但是,对于简单的查询,您的第一个示例是您通常在风格上看到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2013-05-10
    • 2013-10-02
    • 2013-01-06
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多