我有一个名为campaign_list的模型列表,如下所示,在每个模型中都有一些公共字段(like overall_score, audit_date, audit_id).我想找出每个月的average score美元.我已经写了下面的代码和它works but the execution time is more.我想优化执行时间.Execution time increases as the number of records increases张(目前我有200k+的记录,还在增加中).

# List of 40 Models 
campaign_list = [Model1, Model2, Model3, ....., ModelN]

# Method 1
campaign_score = sum([sum([j.overall_score for j in i.objects.filter(audit_date__range=[start_date, todays_date])]) for i in campaign_list])

# Method 2
campaign_score = 0
for i in campaign_list:
   score = sum([j.overall_score for j in i.objects.filter(audit_date__range=[start_date, todays_date])])
   campaign_score += score 

推荐答案

如果您真的有一个模型类列表,那么在一个查询中做所有事情并不是一件容易的事,但至少可以用use the Sum aggregate个来对数据库中的每个模型进行求和.

# List of 40 Models
campaign_list = [Model1, Model2, Model3, ...]

campaign_score = 0
for campaign_model in campaign_list:
    res = campaign_model.objects.filter(
        audit_date__range=[start_date, todays_date]
    ).aggregate(score=Sum("overall_score"))
    if res.get("score"):
        campaign_score += res["score"]

Python相关问答推荐

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

使用groupby Pandas的一些操作

Python解析整数格式说明符的规则?

如何获得每个组的时间戳差异?

将tdqm与cx.Oracle查询集成

Pandas Loc Select 到NaN和值列表

如何使用SentenceTransformers创建矢量嵌入?

合并帧,但不按合并键排序

如何更改groupby作用域以找到满足掩码条件的第一个值?

在pandas/python中计数嵌套类别

在用于Python的Bokeh包中设置按钮的样式

为什么t sns.barplot图例不显示所有值?'

numpy数组和数组标量之间的不同行为

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

Pandas:计数器的滚动和,复位

Matplotlib中的曲线箭头样式

仅取消堆叠最后三列

VSCode Pylance假阳性(?)对ImportError的react

如何在表单中添加管理员风格的输入(PDF)

Antlr Python错误处理简单的PLSQL