擅长:python、mysql、java
<p>原子事务可以减少在循环中花费的时间:</p>
<pre><code>from django.db import transaction
with transaction.atomic():
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):
# if it's already None, why set it to None?
row.percentile = None
mv.percentile = row.percentile
mv.save()
</code></pre>
<p>Django的默认行为是以自动提交模式运行。除非事务处于活动状态,否则每个查询都会立即提交到数据库。</p>
<p>通过使用<code>with transaction.atomic()</code>,所有插入都被分组到一个事务中。提交事务所需的时间在所附的所有insert语句中摊销,因此每个insert语句的时间大大减少。</p>