Database schema migrations for Python. Inspired by Play Framework Evolutions.
Project description
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.
📚 См. также
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a08f5b55fdbc5e5d1638b584550b246579067ccddc48d6e8f65cae49c6ab0d49
|
|
| MD5 |
b70929133c2e8360f307942b28fc57d3
|
|
| BLAKE2b-256 |
204dc294866ee7c12b1d9913b5abfa7b04d0ce60a9530dee16dd8c4b04454214
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f92c98923a4d46698945421df6f6a781411e4f2d66e4d564cbbab5734795df54
|
|
| MD5 |
85549ffe3bdb3d044f9dd05152c3b54a
|
|
| BLAKE2b-256 |
f835022b30f5b0070122a8bea78ebb0ca571cf875993b2b79a94d8c064da2f99
|