dbevo
Database schema migrations for Python.
Легковесный фреймворк для управления миграциями базы данных, вдохновленный Play Framework Evolutions.
📋 Содержание
🚀 Установка
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dbevo-0.0.2.tar.gz | 26.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.