Skip to main content

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.


📚 См. также

Metadata

Release files for dbevo 0.0.2

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

Source distribution (sdist)

Source distribution for dbevo 0.0.2
File Size Uploaded Provenance
dbevo-0.0.2.tar.gz 26.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dbevo 0.0.2
File Interpreter ABI Platform
dbevo-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 57.9 kB

Release files / dbevo-0.0.2.tar.gz

Download URL dbevo-0.0.2.tar.gz
Size 26.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a08f5b55fdbc5e5d1638b584550b246579067ccddc48d6e8f65cae49c6ab0d49
BLAKE2b-256 checksum
How to use checksums
204dc294866ee7c12b1d9913b5abfa7b04d0ce60a9530dee16dd8c4b04454214
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / dbevo-0.0.2-py3-none-any.whl

Download URL dbevo-0.0.2-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f92c98923a4d46698945421df6f6a781411e4f2d66e4d564cbbab5734795df54
BLAKE2b-256 checksum
How to use checksums
f835022b30f5b0070122a8bea78ebb0ca571cf875993b2b79a94d8c064da2f99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Security for dbevo 0.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files No provenance

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