如果我执行select_for_update,该锁何时/如何释放?一些示例代码:
for rec_id in list(1,2,3):
record = MyModel.objects.select_for_update().get(pk=rec_id)
# Do several things to this record
record.save()
在save()
之后是否释放了锁,或者在视图返回并且整个事务完成后是否释放了锁?如何控制锁的粒度?
文档似乎没有说:https://docs.djangoproject.com/en/1.6/ref/models/querysets/#select-for-update
答案 0 :(得分:10)
锁定在交易期间有效,由您控制。因此,您可以使用常用方法控制事务的粒度来控制锁的粒度:@transaction.atomic
,with transaction.atomic()
,ATOMIC_REQUESTS = True
等。请参阅transaction documentation。< / p>