我是否需要在 Django Rest Framework 序列化程序更新中明确使用事务?

Sco*_*ord 9 django transactions django-rest-framework

根据http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations,为了接受嵌套序列化程序,我需要创建一个update方法。尽管它们确实修改了多个行/表,但没有一个示例使用事务。DRF 是否已经以某种方式将事物包装在事务中,还是应该明确地将其transaction.atomic()全部覆盖?

相关公关:

Raf*_*fid 6

您还可以使用 Django 的ATOMIC_REQUESTS数据库设置,它会在执行每个请求之前应用一个事务,并在请求成功完成时提交它。更多信息在这里:

数据库事务 - 将事务绑定到 HTTP 请求

  • 但是请注意,如果您的 API 有大量读取操作,您最终可能会为这些读取产生不必要的事务开销(即使对于使用 `ATOMIC_REQUESTS` 的只读操作也会创建事务) (9认同)
  • 损坏的链接:https://docs.djangoproject.com/en/dev/topics/db/transactions/#tying-transactions-to-http-requests (2认同)

Lin*_*via 5

相关 PR 与您的问题无关。PR 链接到绕过默认 Django 事务方案的 DRF 特定异常处理程序 ( https://github.com/tomchristie/django-rest-framework/pull/1204#issuecomment-52712621 )。

DRF 并没有专门在事务中包装东西,让用户可以自由选择他们想要的任何东西。


小智 5

首先从 db 导入事务模块,然后使用以下命令

with transtaction.atomic():
    pass
Run Code Online (Sandbox Code Playgroud)

这将确保数据库中数据的原子性和一致性。