【问题标题】:Django query optimization: retrieve values in groups possible?Django查询优化:可以分组检索值吗?
【发布时间】:2011-10-17 12:15:30
【问题描述】:

我有:

active = Node.objects.filter(status = 'a')
potential = Node.objects.filter(status = 'p')
hotspot = Node.objects.filter(status = 'h')

我想知道:是否有可能以更好的方式做到这一点?

编辑:也许我没有很好地解释自己。我需要有 3 个具有 3 个不同状态的列表。如果我只做 1 个查询,那么我将不得不遍历列表以创建 3 个新列表,但是如果列表很长,那不是效率低下吗?

【问题讨论】:

    标签: python django django-queryset django-orm


    【解决方案1】:

    更好的是,使用in

    Node.objects.filter(status__in=['a', 'p', 'h'])
    

    评论后编辑不知道为什么这样会低效。也许一种改进是添加.order_by('status'),这样您就可以得到一个有序的查询集,然后在迭代时拆分。不过可能是微优化。

    【讨论】:

    • 也许我没有很好地解释自己。我需要有 3 个具有 3 个不同状态的列表。如果我只做 1 个查询,那么我将不得不遍历列表以创建 3 个新列表,但如果列表很长,那不是效率低下吗?
    【解决方案2】:

    看看 Django Q 对象

    from django.db.models import Q;

    Node.objects.filter(Q(status = 'a') | Q(status = 'p' | Q(status = 'h'))

    来源: https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多