Skip to main content

Database schema migrations for Python. Inspired by Play Framework Evolutions.

Project description

dbevo

Database schema migrations for Python.

Легковесный фреймворк для управления миграциями базы данных, вдохновленный Play Framework Evolutions.

Python Version License


📋 Содержание


🚀 Установка

git clone https://github.com/xDarkmanx/dbevo.git
cd dbevo
poetry install

⚡ Быстрый старт

1. Настройка окружения

Создайте файл .env в корне проекта:

DBEVO_DATABASE_URL=postgresql://user:password@localhost:5432/mydb
DBEVO_MIGRATIONS_PATH=migrations
DBEVO_TEMPLATE_PATH=src/dbevo/templates/migration.sql.j2

2. Инициализация схемы отслеживания

dbevo init

Создаёт схему dbevo с таблицами для отслеживания применённых миграций.

3. Создание новой миграции

dbevo new add_user_table --schema core

Создаёт файл: migrations/core/000001__add_user_table.sql

4. Применение миграций

dbevo apply

5. Проверка статуса

dbevo status

⚙️ Конфигурация

Конфигурация загружается в следующем порядке (приорет сверху вниз):

  1. Переменные окружения (префикс DBEVO_)
  2. Файл .env
  3. Значения по умолчанию

Доступные переменные

Переменная Описание По умолчанию
DBEVO_DATABASE_URL PostgreSQL DSN -
DBEVO_MIGRATIONS_PATH Путь к миграциям migrations
DBEVO_TEMPLATE_PATH Шаблон миграции src/dbevo/templates/migration.sql.j2
DBEVO_SCHEMA_NAME Схема БД dbevo
DBEVO_GENERATE_OUTPUT Выходная директория для генерации моделей src/dbevo/models

🛠 CLI Команды

dbevo init

Инициализирует схему отслеживания миграций в базе данных.

dbevo init [--debug]

dbevo status

Показывает статус всех миграций.

dbevo status [--debug]

Пример вывода:

dbevo status

Database: postgresql://localhost:5432/mydb
Migrations path: migrations

┌────────────────────────────────────┬─────────────┬──────────┬────────────────┐
│ Migration                          │ Group       │ Status   │ Applied At     │
├────────────────────────────────────┼─────────────┼──────────┼────────────────┤
│ 000001__init_core_schema           │ core        │ applied  │ 2026-03-30 10: │
│ 000002__init_utils_schema          │ utils       │ applied  │ 2026-03-30 10: │
│ 000003__create_update_trigger_func │ utils       │ pending  │ -              │
└────────────────────────────────────┴─────────────┴──────────┴────────────────┘

Total: 1 pending, 2 applied

dbevo apply

Применяет все ожидающие миграции.

dbevo apply [--debug] [--auto-confirm] [--dry-run]

Опции:

Опция Описание
--debug Включить debug вывод
--auto-confirm Пропустить подтверждение
--dry-run Показать SQL без выполнения

dbevo revert

Откатывает миграции до указанной версии.

dbevo revert --to 000002 [--debug] [--dry-run] [--auto-confirm] [--force]

Опции:

Опция Описание
--to Номер миграции, к которой откатиться
--dry-run Показать SQL без выполнения
--auto-confirm Пропустить подтверждение
--force Принудительно, даже если файл изменён

dbevo new

Создаёт новый файл миграции.

dbevo new <description> [--schema <schema_name>]

Примеры:

dbevo new add_user_table --schema core
dbevo new add_email_column --schema utils

dbevo generate

Генерирует Pydantic-модели из схемы базы данных.

dbevo generate models [--output <path>]

📁 Структура миграций

Миграции организованы по группам (схемам) и имеют глобальный номер.

migrations/
├── core/
│   ├── 000001__init_core_schema.sql
│   └── 000004__add_user_table.sql
└── utils/
    ├── 000002__init_utils_schema.sql
    ├── 000003__create_indexes.sql
    └── 000005__create_update_trigger_function.sql

Формат имени файла

<6-digit-number>__<description>.sql
  • Номер: 6 цифр, глобальная нумерация
  • Описание: snake_case, описывает изменения

Формат миграции

------------------------------------------------------------------------------------------------------------------------
-- Author: Semenets Pavel <p.semenets@gmail.com>
-- Project: dbevo
-- Schema: utils
-- Create: Date: 2026-03-30
-- Migration: 000002__init_utils_schema
------------------------------------------------------------------------------------------------------------------------

-- !Ups
------------------------------------------------------------------------------------------------------------------------
-- Desc: init_utils_schema
------------------------------------------------------------------------------------------------------------------------
CREATE SCHEMA IF NOT EXISTS "utils";
COMMENT ON SCHEMA "utils" IS 'core schema';


-- !Ups end

-- !Downs
------------------------------------------------------------------------------------------------------------------------
-- Desc: Rollback
------------------------------------------------------------------------------------------------------------------------
DROP SCHEMA IF EXISTS "utils";


-- !Downs end

Секции:

Секция Описание
-- !Ups SQL для применения миграции
-- !Downs SQL для отката миграции

Откат до конкретной версии

# Откат всех миграций после 000002
dbevo revert --to 2

# Откат с подтверждением
dbevo revert --to 000002 --auto-confirm

Dry-run для проверки SQL

# Проверка перед применением
dbevo apply --dry-run

# Проверка перед откатом
dbevo revert --to 000002 --dry-run

🔧 Разработка

Зависимости

poetry install --with lint,test,security

Запуск тестов

poetry run pytest

Linting

poetry run flake8 src/
poetry run bandit -r src/

📄 Лицензия

MIT License. См. LICENSE для деталей.


🤝 Вклад

Приветствуются Pull Requests! Пожалуйста, сначала обсудите изменения в issue.


📚 См. также

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbevo-0.0.1.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dbevo-0.0.1-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file dbevo-0.0.1.tar.gz.

File metadata

  • Download URL: dbevo-0.0.1.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dbevo-0.0.1.tar.gz
Algorithm Hash digest
SHA256 fa42e439a0fd023ecee44b3beda33a19522c602cacf46cc43f03b98edcb314c7
MD5 a646682edc4f993db8a41d315190965c
BLAKE2b-256 7c01a7430ae396093efec9a5e2c12277bec6c075188eb198ee6a613d3954c22a

See more details on using hashes here.

File details

Details for the file dbevo-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: dbevo-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dbevo-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 47d9632cbe9765daf5ad53949a3fa8634edabd701d7aaf1998b05bf095131836
MD5 cfeed35a4be012801a91a0ac57c2f4e6
BLAKE2b-256 2f6036f35f6f68fa9ffc60e4d1bd62f3a3f66ff04fbc3dfce10adc0ca2ebba04

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page