Django查询最佳实践

时间:2018-03-06 18:18:27

标签: python django django-models

想知道一些Django查询性能/最佳实践。据我所知,QuerySets是"lazy"作为文档说明,并且下面的三个查询在某些时候实际评估之前不会运行。这是一个正确的理解,下面的代码片段是一个合理的方法来针对同一个字段针对三个不同的过滤器值查询同一个表吗?

    # 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')

谢谢!

1 个答案:

答案 0 :(得分:2)

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