django中的原子事务是否在数据库级别?

时间:2019-03-06 06:15:38

标签: django database atomic

我有一个在Docker容器上运行的django后端应用程序, 我在某些需要使用原子交易的地方

因此,由于我的流量很高,并且在许多地方需要昂贵的计算,所以我想运行django应用程序的另一个实例,并平衡负载,

我的问题是,instance1开始了原子事务,并且instance2要在同一记录上开始原子事务,instance2是否看到instance1正在运行原子事务,因此请求将等到instance1完成吗?

谢谢

1 个答案:

答案 0 :(得分:0)

是的,Django能够处理此类请求!

对于并发事务,可以在select_for_update块内的managerqueryset对象上使用transaction.atomic()方法。您可以从here中找到有关select_for_update的文档。

  

注意:将transaction.atomic()与select_for_update()结合使用可在数据库级别处理并发性和原子性。

select_for_update在数据库级别执行以下类型的查询。

SELECT FOR UPDATE wallet where wallet.id = '1'

例如

from django.db import transaction

user_wallet = Wallet.objects.select_for_update().get(user=request.user)  # select for update query
with transaction.atomic():   # atomic transactions block
    user_wallet.amount += Decimal('200')  # updating user's wallet amount
    user_wallet.save()

有关更多信息,请参见Django Database Transactions documentation

相关问题