Как сделать транзакцию в Django
Python
Junior
Без компании
Как сделать транзакцию в Django
Ответы
В Django транзакции реализуются через модуль `django.db.transaction`. Основные способы:
- **Декоратор `@transaction.atomic`**:
```
from django.db import transaction
@transaction.atomic
def view_func(request):
# Код внутри транзакции
obj1.save()
obj2.save() # Если ошибка - откатываются оба сохранения
```
- **Контекстный менеджер**:
```
def view_func(request):
with transaction.atomic():
# Код внутри транзакции
obj1.save()
obj2.save()
```
- **Вложенные транзакции** (savepoints):
```
with transaction.atomic():
obj1.save()
savepoint = transaction.savepoint() # точка сохранения
try:
obj2.save()
except:
transaction.savepoint_rollback(savepoint) # откат к savepoint
```
При ошибке внутри блока транзакции происходит автоматический откат. Для PostgreSQL и MySQL транзакции работают по-разному (например, в MySQL не все движки поддерживают транзакции).