更新过滤的记录时,如果要确保在完成此select_for_update
之前不会被其他进程更改过滤的行,是否需要update
,还是可以保证此过滤器+更新原子性开箱即用?
即,这是:
with transaction.atomic():
Foo.objects.select_for_update().filter(id=1).update(**kwargs)
相当于:
Foo.objects.filter(id=1).update(**kwargs)
?
我正在使用Django 1.6.x。
简短回答:
当所有内容都在一个查询中时(您的情况),您不需要使用select_for_update
。
更长的答案:
它称为“脏读取”,并且在“读取已提交”事务隔离级别中涉及,该级别通常默认情况下使用。