Расскажи как делать транзакции в 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)`