Bob*_*Bob 5 django transactions
替换此代码是否安全:
def view(request):
reporter.stories_filed = F('stories_filed') + 1
Run Code Online (Sandbox Code Playgroud)
有了这个:
@transaction.atomic
def view(request):
reporter.stories_filed += 1
Run Code Online (Sandbox Code Playgroud)
这是错误的:
@transaction.atomic
def view(request):
reporter.stories_filed = F('stories_filed') + 1
Run Code Online (Sandbox Code Playgroud)
?
答案取决于所使用的事务隔离级别(最常见的答案是NO)
我在这里找到了非常详细的解释:
https://en.wikipedia.org/wiki/Isolation_(database_systems)
简要总结:有几个事务隔离级别会影响事务的运行方式,Django 使用哪个级别取决于您的 RDBMS、它的设置等。
只有“可序列化”事务隔离级别才能防止竞争条件(F 对象的目的)。大多数 RDBMS 和 Django 中默认不使用它。
事务的目的主要是另一件事:确保事务内的所有语句都被提交,或者没有语句被提交。
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |