Django查询最佳实践

问题描述 投票:0回答:1

想知道一些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')

谢谢!

python django django-models
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.