相关疑难解决方法(0)

在Django中一次更新多个对象?

我正在使用Django 1.9.我有一个Django表,表示按月组织的特定度量值,原始值和百分位数:

class MeasureValue(models.Model):
    org = models.ForeignKey(Org, null=True, blank=True)
    month = models.DateField()
    calc_value = models.FloatField(null=True, blank=True)
    percentile = models.FloatField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

每月通常有10,000左右.我的问题是我是否可以加快在模型上设置值的过程.

目前,我通过使用Django过滤器查询检索一个月的所有度量值,将其转换为pandas数据帧,然后使用scipy rankdata来设置排名和百分位数来计算百分位数.我这样做是因为pandas rankdata是高效的,能够忽略空值,并能够以我想要的方式处理重复的值,所以我很满意这个方法:

records = MeasureValue.objects.filter(month=month).values()
df = pd.DataFrame.from_records(records)
// use calc_value to set percentile on each row, using scipy's rankdata
Run Code Online (Sandbox Code Playgroud)

但是,我需要从数据框中检索每个百分位值,并将其设置回模型实例.现在我通过迭代数据帧的行并更新每个实例来做到这一点:

for i, row in df.iterrows():
    mv = MeasureValue.objects.get(org=row.org, month=month)
    if (row.percentile is None) or np.isnan(row.percentile):
        row.percentile = None
    mv.percentile = row.percentile
    mv.save()
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,这很慢.是否有任何有效的Django方法来加速它,通过单个数据库写入而不是数万个?我检查了文档,但看不到一个.

python django

12
推荐指数
2
解决办法
8425
查看次数

标签 统计

django ×1

python ×1