我有以下sheetinfo
模型,其中包含以下数据:
| Trav | Group | Subgroup | Sheet_num | T_val |
| SAT123A01 | SAT123 | A | 1 | 400 |
| SAT123A02 | SAT123 | A | 2 | 0 |
| SAT123A03 | SAT123 | A | 3 | 0 |
| SAT123A04 | SAT123 | A | 4 | 0 |
| SAT123A05 | SAT123 | A | 5 | 500 |
| SAT123B05 | SAT123 | B | 5 | 400 |
| SAT123B04 | SAT123 | B | 4 | 0 |
| SAT123B03 | SAT123 | B | 3 | 0 |
| SAT123B02 | SAT123 | B | 2 | 500 |
| SAT124A01 | SAT124 | A | 1 | 400 |
| SAT124A02 | SAT124 | A | 2 | 0 |
| SAT124A03 | SAT124 | A | 3 | 0 |
| SAT124A04 | SAT124 | A | 4 | 475 |
我想用正确的T_val插入和更新表。
公式是:
new_t_val = delta / (cnt -1) * sheet_num + min_tvc_of_subgroup
例如前5名:
| Trav | Group | Subgroup | Sheet_num | T_val |
| SAT123A01 | SAT123 | A | 1 | 400 |
| SAT123A02 | SAT123 | A | 2 | 425 |
| SAT123A03 | SAT123 | A | 3 | 450 |
| SAT123A04 | SAT123 | A | 4 | 475 |
| SAT123A05 | SAT123 | A | 5 | 500 |
我有一个用于更新数据的django查询,但它是SLOW并在一段时间后停止(由于类型错误等)。
我的问题是有没有办法在SQL中实现这一点?
答案 0 :(得分:1)
作为一个数据库调用执行此操作的能力并不存在于Django库存中。但是存在第三方包:https://github.com/aykut/django-bulk-update
该包的工作原理示例:
rows = Model.objects.all()
for row in rows:
# Modify rows as appropriate
row.T_val = delta / (cnt -1) * row.sheet_num + min_tvc_of_subgroup
Model.objects.bulk_update(rows)
对于最大1,000,000范围的数据集,这应该具有合理的性能。迭代和.save() - 每个对象的大部分瓶颈是数据库调用的开销。 python部分相当快。上面的例子只有两个数据库调用,所以它可能是一个数量级或两个更快。