Skip to main content

Расширение механизма миграций Django для резервного копирования данных

Описание

Пакет django-backup-migrations расширяет стандартный механизм миграций Django, добавляя возможность автоматического создания резервных копий данных перед применением миграций. Это позволяет откатывать изменения в случае ошибок при выполнении миграций.

Основные возможности

  • Автоматическое определение таблиц для резервного копирования на основе операций миграции
  • Два типа резервного копирования:
    • full — полная копия всех данных таблицы
    • partial — копия только изменённых данных с момента последнего резервного копирования
  • Автоматическое определение зависимостей между таблицами через внешние ключи и триггеры
  • Управление состояниями: просмотр, откат и удаление состояний вместе с резервными таблицами в схеме backup

Требования

  • Python 3.10+
  • Django 4.2+
  • PostgreSQL (адаптер по умолчанию)

Подключение

1. Установка пакета

pip install django-backup-migrations

2. Добавление в INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'django_backup_migrations',
    ...
]

3. Настройка конфигурации (опционально)

# settings.py
DJANGO_BACKUP_MIGRATIONS_ENABLED = True  # Включить/выключить резервное копирование

Или программно:

import django_backup_migrations

django_backup_migrations.set_config(
    django_backup_migrations.Config(
        enabled=True,
        tables_dependencies={
            'app_table': {'related_table1', 'related_table2'},  # Явные зависимости
        }
    )
)

Использование

Основная команда: backupmigrate

Команда backupmigrate заменяет стандартную команду migrate и выполняет резервное копирование перед применением миграций.

Базовое использование

# Применить все неприменённые миграции
python manage.py backupmigrate

# Применить миграции для конкретного приложения
python manage.py backupmigrate app_name

# Применить конкретную миграцию
python manage.py backupmigrate app_name 0004

# Применить миграции с полным резервным копированием
python manage.py backupmigrate --backup-type full

# Применить миграции с частичным резервным копированием (по умолчанию)
python manage.py backupmigrate --backup-type partial

Параметры команды

  • --backup-type — тип резервного копирования:
    • full — полная копия всех данных
    • partial — копия только изменённых данных (по умолчанию)
  • --backup-strategy — стратегия резервного копирования (путь к классу стратегии)
  • Все стандартные параметры команды migrate (например, --database, --fake, --plan)

Управление состояниями

Просмотр списка состояний

# Показать все состояния миграций
python manage.py liststates

Вывод показывает:

  • ID состояния
  • Дата и время создания
  • Статус (применено/ошибка)
  • Список применённых миграций

Откат к предыдущему состоянию

# Откат к конкретному состоянию по ID
python manage.py staterollback --to-state 5

# Откат от конкретного состояния к предыдущему
python manage.py staterollback --rollback-state 10

# Пробный запуск (dry-run) без реального отката
python manage.py staterollback --to-state 5 --dry-run

Удаление состояний

Команда dropstates удаляет записи о состояниях и связанные с ними резервные таблицы в схеме backup. Нужно указать ровно один способ выбора состояний:

# Удалить все состояния с id строго меньше указанного
python manage.py dropstates --before 10

# Удалить состояния с указанными id
python manage.py dropstates --id 3 --id 5 --id 7

# Оставить только последние N состояний (по дате), остальные удалить
python manage.py dropstates --keep-last 5

# Указать базу данных и пробный запуск
python manage.py dropstates --keep-last 3 --database default --dry-run

Параметры:

  • --before ID — удалить все состояния с id < ID
  • --id ID — удалить состояния с указанными id (можно передать несколько раз)
  • --keep-last N — оставить только последние N состояний
  • --database — имя базы данных (по умолчанию default)
  • --dry-run — только показать, какие состояния будут удалены

Разработка и качество кода

Ruff

Проект использует Ruff для проверки и форматирования кода.

ruff check src/
ruff format src/

isort

Проект использует isort для сортировки и организации импортов.

isort src/

Metadata

Release files for django-backup-migrations 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-backup-migrations 2.0.0
File Size Uploaded
django_backup_migrations-2.0.0.tar.gz 36.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-backup-migrations 2.0.0
File Interpreter ABI Platform
django_backup_migrations-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 79.4 kB

Release files / django_backup_migrations-2.0.0.tar.gz

Download URL django_backup_migrations-2.0.0.tar.gz
Size 36.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4a25130c6d6134527d20ec596c30f6165c3eb78a122a03a17fc9fc676b2dcc55
BLAKE2b-256 checksum
How to use checksums
564ff8464a66c4b75d36f5c4f76124656345af6a88747d5f340964db33296b27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / django_backup_migrations-2.0.0-py3-none-any.whl

Download URL django_backup_migrations-2.0.0-py3-none-any.whl
Size 43.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8eeece376d5c732e5c140b36eb6942d5056522c350ab330160aaf3aa6c468165
BLAKE2b-256 checksum
How to use checksums
32fe40dc14fd0c5e926d55244bd773b4f9504f4350e8e06ecf74457c561ce4bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page