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. Настройка окружения

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

[dbevo]
author = "You name <you@email>"
project = "dbevo"
auto_apply = false
dry_run = false
verbose = true

[dbevo.database]
database_uri="postgresql://user:pass@localhost:5432/database"
pool_min_size = 1
pool_max_size = 10
command_timeout = 60

[dbevo.migrations]
path = "dbevo"
table = "dbevo.migrations"
groups_table = "dbevo.migration_groups"
history_table = "dbevo.migration_history"
lock_table = "dbevo.locks"
config_table = "dbevo.config"

[dbevo.generate]
migration_template = "templates/migration.sql.j2"
sqlalchemy_template = "templates/sqlalchemy.py.j2"
pydantic_template = "templates/pydantic.py.j2"

[dbevo.generate.exclude]
columns = ["id", "create_at", "update_at"]
technical = false
sensitive = false
foreign_keys = false

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

🛠 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.2.tar.gz (26.8 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.2-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dbevo-0.0.2.tar.gz
  • Upload date:
  • Size: 26.8 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.2.tar.gz
Algorithm Hash digest
SHA256 a08f5b55fdbc5e5d1638b584550b246579067ccddc48d6e8f65cae49c6ab0d49
MD5 b70929133c2e8360f307942b28fc57d3
BLAKE2b-256 204dc294866ee7c12b1d9913b5abfa7b04d0ce60a9530dee16dd8c4b04454214

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbevo-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 31.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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f92c98923a4d46698945421df6f6a781411e4f2d66e4d564cbbab5734795df54
MD5 85549ffe3bdb3d044f9dd05152c3b54a
BLAKE2b-256 f835022b30f5b0070122a8bea78ebb0ca571cf875993b2b79a94d8c064da2f99

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