我需要从每一列获取唯一的数据 我有一个字段列表:
MY_FIELDS = ['id', 'created', 'And_more_28']
我的代码效率极低,但却产生了正确的结果
qs = Sheets.objects.all()
v = []
v += [list(qs.values(v).distinct()) for v in MY_FIELDS]
我得到了我需要的东西......但是代价是什么? (28个请求很痛苦) 告诉我如何从中进行一个查询......
这就是它为每个列生成非唯一数据的方式(尝试过)
qs = Sheets.objects.all().values(*MY_FIELDS).distinct()
你的第二种方法确实产生了独特的价值,但这些是独特的组合。因此,如果有 10 个字段,每个字段有 5 个值,则最多会产生 510 结果,因此它会大幅缩放。
但好消息是,我们可以通过将所有列聚合到不同的列表中来解决这个问题。事实上,与
ArrayAgg
[Django-doc]:
MY_FIELDS = ['id', 'created', 'And_more_28']
from django.contrib.postgres.aggregates import ArrayAgg
qs = Sheets.objects.aggregate(
**{'values_{f}': ArrayAgg('f', distinct=True) for f in MY_FIELDS}
)
v = [qs[f'values_{f}'] for f in MY_FIELDS]
这将为每列生成不同值的列表,并且全部在一个单个查询中。