【问题标题】:Django Object Filter (last 1000)Django 对象过滤器(最后 1000 个)
【发布时间】:2010-12-07 23:19:58
【问题描述】:

如何通过 Objects.filter 从数据库中检索最后 1,000 个值?我目前正在做的是将前 1,000 个值输入数据库(即 10,000 行,它给我带来 1-1000,而不是 9000-1,000)。

当前代码:

limit = 1000
Shop.objects.filter(ID = someArray[ID])[:limit]

干杯

【问题讨论】:

    标签: django filter


    【解决方案1】:

    解决办法:

    queryset = Shop.objects.filter(id=someArray[id])
    limit = 1000
    count = queryset.count()
    endoflist = queryset.order_by('timestamp')[count-limit:]
    

    endoflist 是您想要的查询集。


    效率:

    以下内容来自 django 文档中关于 reverse() 查询集方法的内容。

    检索“最后”五个项目 一个查询集,你可以这样做:

    my_queryset.reverse()[:5]
    

    请注意,这并不完全相同 从序列的末尾切片 在 Python 中。上面的例子将 首先返回最后一项,然后 倒数第二个项目等等。如果我们有 一个 Python 序列并查看了 seq[-5:],我们会看到倒数第五个 项目第一。 Django 不支持 这种访问模式(从 结束),因为这是不可能的 它在 SQL 中有效。

    所以我不确定我的回答仅仅是效率低下,还是效率极低。我将order_by 移到了最终查询中,但我不确定这是否会有所不同。

    【讨论】:

    • 啊!你走在正确的轨道上,我的好人。但是我需要它下降。因此,如果它是 1,2,3,4,5,6,7 而我想要最后两个.. 我希望它是“6,7”而不是“7,6”。
    • 那怎么样:Shop.objects.filter(id=someArray[id]).reverse()[:limit].reverse()
    • 不起作用。这只是将其恢复为原始列表(前 1000 个而不是最后一个。
    • 干得好!这就像做梦一样!虽然这是最有效的方法吗?我不太确定 Django 是如何处理这些调用的,但您最初不是通过时间戳搜索所有 ID,然后进行限制吗?相对于原来限制原始搜索的方式?
    • 我在我的回答中添加了一点关于效率的内容,但这并不是我真正的专业领域。
    【解决方案2】:
    reversed(Shop.objects.filter(id=someArray[id]).reverse()[:limit])
    

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2019-12-27
      • 2018-08-05
      • 1970-01-01
      • 2021-03-25
      • 2010-11-04
      • 2013-03-16
      • 2014-02-10
      相关资源
      最近更新 更多