What is Django's transaction management in depth?
Answer
Django provides multiple levels of transaction management: Autocommit (default): each database operation is immediately committed. Atomic transactions: @transaction.atomic def transfer_funds(from_acc, to_acc, amount): # All or nothing from_acc.balance -= amount; from_acc.save() if from_acc.balance < 0: raise ValueError("Insufficient funds") # Rollback! to_acc.balance += amount; to_acc.save(). @transaction.atomic can be nested — inner decorators create savepoints. Context manager: with transaction.atomic(): order = Order.objects.create(...) with transaction.atomic(): # Savepoint try: process_payment(order) except PaymentError: # Rollback to savepoint, not entire transaction order.status = "payment_failed"; order.save(). Savepoints: from django.db import transaction sid = transaction.savepoint() try: ... except: transaction.savepoint_rollback(sid) else: transaction.savepoint_commit(sid). on_commit hooks: run code only after transaction successfully commits — ideal for side effects: @transaction.atomic def create_user(data): user = User.objects.create(**data) transaction.on_commit(lambda: send_welcome_email.delay(user.id)) # Task only runs if transaction commits. set_autocommit: transaction.set_autocommit(False) for manual control. Isolation levels: configure per database: DATABASES = {"default": {"OPTIONS": {"isolation_level": "repeatable read"}}}. TestCase vs TransactionTestCase: TestCase wraps each test in a transaction (fast); TransactionTestCase actually commits (required for testing on_commit hooks).
Previous
What is Django's database optimization with query analysis?
Next
What is Django's deployment best practices?
More Django Questions
View all →- Advanced What is Django's select_for_update and database locking?
- Advanced What is Django's database optimization with query analysis?
- Advanced What is Django's deployment best practices?
- Advanced What is Django's caching strategies and cache invalidation?
- Advanced What is Django's performance with database connection pooling?