【发布时间】:2017-09-14 19:54:01
【问题描述】:
我正在使用 Django 来了解如何处理大型数据库。我使用包含名称、年龄、出生日期(dob)和身高的数据库。该数据库有大约 500000 个条目。我必须找到(1)同龄和(2)同年出生的人的平均身高。查询表中的聚合函数大约需要 10s。是平常还是我错过了什么?
年龄:
age = [i[0] for i in Data.objects.values_list('age').distinct()]
ht = []
for each in age:
aggr = Data.objects.filter(age=each).aggregate(ag_ht=Avg('height')
ht.append(aggr)
来自dob,
age = [i[0].year for i in Data.objects.values_list('dob').distinct()]
for each in age:
aggr = Data.objects.filter(dob__contains=each).aggregate(ag_ht=Avg('height')
ht.append(aggr)
必须从 dob 中提取年份。它是 SQLite,我不能使用 __year (join)。
【问题讨论】:
-
在第二种情况下如何过滤?
-
我用的是同一个结构的filter。
for each in age: aggr = Data.objects.filter(dob__contains=each).aggregate(ag_ht=Avg('height') ht.append(aggr); ht.append(aggr) -
我会考虑你的情况
标签: django sqlite aggregate django-queryset