select_for_update
我正在尝试通过使用该实用程序来利用 django 的行级锁定。根据文档,这只能在transaction.atomic
块内使用。使用块的副作用transaction.atomic
是,如果我的代码抛出异常,所有数据库更改都会回滚。我的用例是这样的,我实际上希望保留数据库更改,并允许传播异常。这让我的代码看起来像这样:
with transaction.atomic():
user = User.objects.select_for_update.get(id=1234)
try:
user.do_something()
except Exception as e:
exception = e
else:
exception = None
if exception is not None:
raise exception
这感觉像是一个完全的反模式,我敢肯定我一定遗漏了一些东西。我知道我可能会通过手动使用transaction.set_autocommit
来管理事务来推出我自己的解决方案,但我认为会有一种更简单的方法来获得这个功能。有没有一种内置的方式来实现我想要的?