【问题标题】:Django Filter QueryDjango 过滤器查询
【发布时间】:2014-07-05 10:11:04
【问题描述】:

我想从扫描的last 100 数据包中获取具有status = 'open' 的所有数据包的计数。

目前我进行顺序搜索,即

packet_obj = Packets.objects.all().oreder_by('-time')[:100] # getting the last 100 packets

for packets in packet_obj:
    if packets.status == 'open' : count += 1 # comparing the status

是否有直接的单个查询来获取此计数?

【问题讨论】:

  • 为什么你不能只做qs = Packets.objects.order_by('-time')[:100]和len(qs.filter(status='open')[:100])

标签: python django django-models


【解决方案1】:

你可以在单行中尝试这个,但我认为它不可能循环而不是循环

packet_obj = Packets.objects.all.oreder_by('-time')[:100]
count=sum(1 for packets in packet_obj if packets.status == 'open')

另外你可以试试这个method

【讨论】:

  • 不应用 for 循环,难道没有对此的查询吗?
  • 感谢您的链接。在链接中提供的第二个答案中,有 27 个赞成票,哪一个会更快,使用我目前正在做的循环还是答案本身?
  • 我认为它进行了两次数据库调用。首先是切片时,另一个是 in 查询。使用循环不是会更快吗?
  • @user1162512 是的,你可以试试。我的建议是坚持这个。因为你需要调用数据库两次。答案是一次。我认为这会更快
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 2019-07-29
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2017-02-13
相关资源
最近更新 更多