gpt4 book ai didi

django 计算查询中相同字段值的最有效方法

转载 作者:行者123 更新时间:2023-11-28 19:34:40 33 4
gpt4 key购买 nike

假设我有一个包含很多字段的模型,但我只关心一个字符字段。可以说 charfield 可以是任何东西,所以我不知道可能的值,但我知道这些值经常重叠。所以我可以有 20 个带有“abc”的对象和 10 个带有“xyz”的对象,或者我可以有 50 个带有“def”的对象和 80 个带有“stu”的对象,我有 40000 个没有重叠,我真的不在乎。

如何有效地计数对象?我想要返回的是这样的:

{'abc': 20, 'xyz':10, 'other': 10,000}

或类似的东西,无需进行大量 SQL 调用。

编辑:

我不知道是否有人会看到这个,因为我正在编辑它有点晚,但是......

我有这个模型:

class Action(models.Model):    author = models.CharField(max_length=255)    purl = models.CharField(max_length=255, null=True)

从答案来看,我是这样做的:

groups = Action.objects.filter(author='James').values('purl').annotate(count=Count('purl'))

但是……

这就是群组:

{"purl": "waka"},{"purl": "waka"},{"purl": "waka"},{"purl": "waka"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "lora"}

(我只是用虚拟值填充了 purl)

我想要的是

{'waka': 4, 'mora': 5, 'lora': 1}

希望有人会看到这个编辑...

编辑 2:

显然 我的数据库 (BigTable) 不支持 Django 的聚合函数,这就是我一直遇到所有问题的原因。

最佳答案

你想要类似于“count ... group by”的东西。您可以使用 django 的 ORM 的聚合功能来做到这一点:

from django.db.models import Count

fieldname = 'myCharField'
MyModel.objects.values(fieldname)
.order_by(fieldname)
.annotate(the_count=Count(fieldname))

关于此主题的先前问题:

关于django 计算查询中相同字段值的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606416/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com