Расскажи как делать транзакции в Django ORM
Python
Junior
Без компании
Расскажи как делать транзакции в Django ORM
Ответы
В Django ORM транзакции позволяют выполнять несколько операций с БД как единое целое. Основные способы:
- Декоратор `@transaction.atomic`:
```
from django.db import transaction
@transaction.atomic
def update_data():
# Все операции внутри выполнятся в одной транзакции
model1.save()
model2.save()
# Если возникнет исключение - все изменения откатятся
```
- Контекстный менеджер `atomic()`:
```
with transaction.atomic():
# Блок кода в транзакции
obj1.save()
obj2.delete()
```
- Вложенные транзакции (savepoints):
```
with transaction.atomic(): # Внешняя транзакция
obj1.save()
try:
with transaction.atomic(): # Внутренняя точка сохранения
obj2.save()
raise Exception
except Exception:
pass # Откатится только obj2, obj1 сохранится
```
Ключевые особенности:
- По умолчанию Django использует autocommit режим
- Транзакции поддерживаются только для операций с БД
- При ошибке происходит автоматический rollback
- Можно явно откатить через `transaction.set_rollback(True)`