CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-django-stubs

Comprehensive type stubs for Django framework enabling static type checking with mypy

Pending
Overview
Eval results
Files

transactions.mddocs/

Database Transactions

Django's transaction system provides database transaction management with atomic operations, savepoints, and commit/rollback functionality for ensuring data consistency and integrity.

Core Imports

# Transaction management
from django.db import transaction

# Transaction functions
from django.db.transaction import (
    atomic, commit, rollback,
    savepoint, savepoint_commit, savepoint_rollback,
    get_autocommit, set_autocommit,
    get_rollback, set_rollback,
    on_commit, mark_for_rollback_on_error
)

# Transaction exceptions
from django.db.transaction import TransactionManagementError

Capabilities

Atomic Transactions

The atomic decorator and context manager for ensuring database operations execute as a single transaction.

class Atomic:
    """
    Context manager and decorator for atomic database operations.
    
    Can be used as decorator or context manager to ensure all database
    operations within the block execute atomically.
    """
    using: str | None
    savepoint: bool
    
    def __init__(self, using: str | None, savepoint: bool, durable: bool) -> None: ...
    def __call__(self, func: Callable) -> Callable: ...
    def __enter__(self) -> None: ...
    def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, exc_tb: TracebackType | None) -> None: ...

def atomic(using: str | None = None, savepoint: bool = True, durable: bool = False) -> Atomic:
    """
    Create atomic transaction block.
    
    Args:
        using: Database alias to use for transaction
        savepoint: Whether to create savepoint for nested transactions
        durable: Whether to ensure transaction durability
        
    Returns:
        Atomic context manager/decorator
    """

Usage Examples:

# As decorator
@transaction.atomic
def create_user_with_profile(user_data, profile_data):
    user = User.objects.create(**user_data)
    Profile.objects.create(user=user, **profile_data)
    return user

# As context manager
def transfer_funds(from_account, to_account, amount):
    with transaction.atomic():
        from_account.balance -= amount
        from_account.save()
        to_account.balance += amount
        to_account.save()

# With specific database
with transaction.atomic(using='db_alias'):
    # Operations on specific database
    pass

Transaction Control

Functions for explicit transaction management and control.

def commit(using: str | None = None) -> None:
    """
    Commit the current transaction.
    
    Args:
        using: Database alias to commit transaction on
    """

def rollback(using: str | None = None) -> None:
    """
    Roll back the current transaction.
    
    Args:
        using: Database alias to rollback transaction on
    """

def get_autocommit(using: str | None = None) -> bool:
    """
    Get autocommit mode for database connection.
    
    Args:
        using: Database alias
        
    Returns:
        Current autocommit setting
    """

def set_autocommit(autocommit: bool, using: str | None = None) -> None:
    """
    Set autocommit mode for database connection.
    
    Args:
        autocommit: Whether to enable autocommit
        using: Database alias
    """

def get_rollback(using: str | None = None) -> bool:
    """
    Get rollback flag for current transaction.
    
    Args:
        using: Database alias
        
    Returns:
        Whether transaction is marked for rollback
    """

def set_rollback(rollback: bool, using: str | None = None) -> None:
    """
    Mark current transaction for rollback.
    
    Args:
        rollback: Whether to mark for rollback
        using: Database alias
    """

Savepoints

Functions for managing transaction savepoints for nested transactions.

def savepoint(using: str | None = None) -> str:
    """
    Create a transaction savepoint.
    
    Args:
        using: Database alias
        
    Returns:
        Savepoint identifier
    """

def savepoint_commit(sid: str, using: str | None = None) -> None:
    """
    Commit a transaction savepoint.
    
    Args:
        sid: Savepoint identifier
        using: Database alias
    """

def savepoint_rollback(sid: str, using: str | None = None) -> None:
    """
    Rollback to a transaction savepoint.
    
    Args:
        sid: Savepoint identifier
        using: Database alias
    """

def clean_savepoints(using: str | None = None) -> None:
    """
    Clean all savepoints for current transaction.
    
    Args:
        using: Database alias
    """

Usage Examples:

def complex_operation():
    with transaction.atomic():
        # Main transaction
        create_user()
        
        # Create savepoint for risky operation
        sid = transaction.savepoint()
        try:
            risky_operation()
            transaction.savepoint_commit(sid)
        except Exception:
            transaction.savepoint_rollback(sid)
            # Continue with main transaction

Post-Commit Hooks

Functions for executing code after transaction commit.

def on_commit(func: Callable[[], object], using: str | None = None, robust: bool = True) -> None:
    """
    Register function to run after current transaction commits.
    
    Args:
        func: Function to execute after commit
        using: Database alias
        robust: Whether to catch and log exceptions from func
    """

Usage Examples:

def send_welcome_email(user_id):
    user = User.objects.get(id=user_id)
    send_email(user.email, 'Welcome!')

def create_user(email, password):
    with transaction.atomic():
        user = User.objects.create(email=email, password=password)
        # Email only sent if transaction commits successfully
        transaction.on_commit(lambda: send_welcome_email(user.id))
        return user

Error Handling

Context manager for handling errors within transactions.

def mark_for_rollback_on_error(using: str | None = None) -> Iterator[None]:
    """
    Context manager that marks transaction for rollback on any exception.
    
    Args:
        using: Database alias
        
    Yields:
        None
    """

Usage Examples:

with transaction.atomic():
    with transaction.mark_for_rollback_on_error():
        # Any exception here will mark transaction for rollback
        potentially_failing_operation()
    # Transaction continues but will be rolled back

Non-Atomic Requests

Decorator to disable automatic transaction wrapping for views.

def non_atomic_requests(using: str | None = None) -> Callable:
    """
    Decorator to disable atomic request handling for views.
    
    Args:
        using: Database alias
        
    Returns:
        Decorator function
    """

Usage Examples:

from django.db import transaction

@transaction.non_atomic_requests
def my_view(request):
    # This view won't be wrapped in automatic transaction
    pass

# For specific database
@transaction.non_atomic_requests(using='read_only_db')
def read_only_view(request):
    pass

Transaction Exceptions

class TransactionManagementError(ProgrammingError):
    """
    Exception raised for transaction management errors.
    
    Indicates improper use of transaction management functions
    or invalid transaction state.
    """

Advanced Usage Patterns

Nested Transactions with Savepoints:

def complex_business_operation():
    with transaction.atomic():  # Outer transaction
        step_one()
        
        with transaction.atomic():  # Inner savepoint
            step_two()  # If this fails, only step_two is rolled back
        
        step_three()  # This still executes

Database-Specific Transactions:

def multi_database_operation():
    with transaction.atomic(using='primary'):
        # Operations on primary database
        primary_operation()
        
        with transaction.atomic(using='analytics'):
            # Operations on analytics database
            analytics_operation()

Conditional Rollback:

def conditional_operation():
    with transaction.atomic():
        result = risky_operation()
        if not result.is_valid():
            transaction.set_rollback(True)

Install with Tessl CLI

npx tessl i tessl/pypi-django-stubs

docs

admin.md

auth.md

contrib.md

database-orm.md

forms.md

http.md

index.md

migrations.md

mypy-plugin.md

signals.md

templates.md

transactions.md

urls.md

views.md

tile.json