2024-06-16 13:59:13 发布
网友
假设我有一个模型a它有一个账号字段,当一个a的新实例被创建时,我的模型中的计数器字段将其值增加一。此值将与我的账户号码字段接收的值相同。在
我想保护操作不被并发修改,这样我的账号总是正确的。在
我想做如下的事情:
instance.account_number = F('modelB_table.counter') + 1
同时更新B中的计数器值
如何在Django 1.9中实现这一点?
在这种情况下,<交易会有帮助吗?
是的,您可以使用事务在Django中实现这一点。你会做一些类似的事情:
with transaction.atomic(): ModelB.objects.update(counter=F('counter') + 1) new_counter = ModelB.objects.get().counter a_instance.account_number = new_counter a_instance.save()
这需要在READ_COMMITTED或更高的事务隔离级别上完成。(在PostgreSQL中,默认的隔离级别是READ_COMMITTED,其他数据库我不确定。)
READ_COMMITTED
它之所以有效,是因为隔离级别使脏读成为不可能,因此在另一个提交之前,并发事务无法更新计数器。在
是的,您可以使用事务在Django中实现这一点。你会做一些类似的事情:
这需要在
READ_COMMITTED
或更高的事务隔离级别上完成。(在PostgreSQL中,默认的隔离级别是READ_COMMITTED
,其他数据库我不确定。)它之所以有效,是因为隔离级别使脏读成为不可能,因此在另一个提交之前,并发事务无法更新计数器。在
相关问题 更多 >
编程相关推荐