数据库级别的django中的原子事务是什么?

问题描述 投票:1回答:1

我有一个django后端应用程序,我正在docker容器上运行,我在一些需要它的地方使用原子事务

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

我的问题是instance1开始一个原子事务,而instance2想要在同一记录上启动一个原子事务,instance2是否看到instance1正在运行一个原子事务,所以请求将等到instance1完成?

谢谢

django database atomic
1个回答
0
投票

是的,Django有能力处理这类请求!

对于并发事务,您可以在select_for_update上使用manager方法,或者在queryset块中使用transaction.atomic()对象。你可以找到select_for_updatehere文件。

注意:使用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

© www.soinside.com 2019 - 2024. All rights reserved.