F() 表达式和原子事务是否可以相互替换?

Are F() expressions and atomic transactions mutually replaceable?

替换此代码是否安全:

def view(request):
    reporter.stories_filed = F('stories_filed') + 1

有了这个:

@transaction.atomic
def view(request):
    reporter.stories_filed += 1       

这是错误的吗:

@transaction.atomic
def view(request):
    reporter.stories_filed = F('stories_filed') + 1

?

答案取决于所使用的事务隔离级别(最常见的答案是

我在这里找到了非常详细的解释:

https://en.wikipedia.org/wiki/Isolation_(database_systems)

简要总结:有几个事务隔离级别会影响事务的功能,Django 使用哪个级别取决于您的 RDBMS、它的设置等。

只有"Serializable"事务隔离级别可以防止竞争条件(F对象的目的)。大多数 RDBMS 和 Django 中默认不使用它。

事务的目的主要是另一回事:确保提交事务中的所有语句或 none 语句。