Расширение механизма миграций 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)
| File | Size | Uploaded | |
|---|---|---|---|
| django_backup_migrations-2.0.0.tar.gz | 36.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|