A lightweight DB migration tool for SQLAlchemy
Project description
SQLAlchemy Shifter
SQLAlchemy Shifter — это легковесный, модульный инструмент для управления миграциями баз данных поверх Python и SQLAlchemy. Идеологически вдохновлен системой миграций фреймворков уровня Yii2 и Laravel.
В отличие от Alembic, здесь нет сложного графа версий, "магической" связки состояний или жесткой привязки к одному файлу alembic.ini. Инструмент использует простой линейный подход, базируясь исключительно на таймстемпах файлов, и спроектирован для использования в современных микросервисных архитектурах (когда миграции могут поставляться разными пакетами).
Ключевые особенности
- Отсутствие Alembic-зависимостей: Работает на чистом
SQLAlchemy Core. Встроен собственный минималистичный DDL-генератор, никаких графов версионирования. - ООП-транзакционность
up/safeUp: Базовый класс предоставляет два уровня методов миграции. Если необходимо выполнение внутри транзакции — логика описывается вsafeUp(). Движок атомарно обернет её блокомwith connection.begin(). - Изоляция через Connection Names: Миграция сама знает, к какой физической базе она относится (через флаг
connection = "default"). Это дает возможность управлять несколькими базами данных из одной точки старта. - Синхронно описываем, Асинхронно исполняем: DDL-миграции пишутся синхронно, а применяются через
run_syncв случае использованияAsyncEngine.
Установка
Используя Poetry:
poetry add sqlalchemy-shifter
Либо классическим pip:
pip install sqlalchemy-shifter
Использование
1. Создание заготовки миграции
Для создания болванки файла миграции предусмотрен встроенный CLI.
python -m sqlalchemy_shifter.cli create create_users_table --path src/myapp/migrations --conn default
Эта команда сгенерирует файл m20260401_120421_create_users_table.py в указанной папке:
from sqlalchemy_shifter.migration import Migration
from sqlalchemy import Column, Integer, String
class m20260401_120421_create_users_table(Migration):
connection = "default"
def safeUp(self):
# Хелперы в стиле Yii2:
self.create_table(
"users",
Column("id", Integer, primary_key=True),
Column("username", String(255), nullable=False)
)
self.create_index("idx_username", "users", ["username"], unique=True)
def safeDown(self):
self.drop_index("idx_username", "users")
self.drop_table("users")
2. Запуск накатки (в коде приложения)
В точке старта вашего приложения инициализируйте ShifterService, передав ему инстансы SQLAlchemy Engines и пути к папкам с реализованными миграциями.
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy_shifter import ShifterService
async def main():
engine_main = create_async_engine("sqlite+aiosqlite:///app.db")
# 1. Инициализируем сервис
shifter = ShifterService(
engines={"default": engine_main}, # Маппинг подключений
paths=["src/myapp/migrations"] # Директории с миграциями
)
# 2. Выполняем миграции
applied_count = await shifter.upgrade_all()
print(f"Applied {applied_count} migrations.")
if __name__ == "__main__":
asyncio.run(main())
Совет:
ShifterService.upgrade_all()проверяет таблицу состоянияshifter_migrationsконкретной базы. Если файл уже в статусе 'applied', он будет проигнорирован.
Лицензия
Пакет поставляется по лицензии MIT. См. файл LICENSE.
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 sqlalchemy_shifter-0.1.0.tar.gz.
File metadata
- Download URL: sqlalchemy_shifter-0.1.0.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4901f188f92bdb44d9e4c2551cdbbe6eebcca735bfef3afd533416f93a25a4e7
|
|
| MD5 |
0788bc485a4c3c878f7c59f76fd379b7
|
|
| BLAKE2b-256 |
3cf46a48742a9535f72e22ba6f6242e31868c7e138c3448e7a3783488bcd5b31
|
File details
Details for the file sqlalchemy_shifter-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sqlalchemy_shifter-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65cee4d20dcfe3630f4e9366a12aaacee596ea150f0583f47610d600b2a9d23e
|
|
| MD5 |
494f03cf1c9f7d1bf82e0332aa2159ae
|
|
| BLAKE2b-256 |
ad1b3beaa2eae66320f1943bf0655b98ee9b7d98124edc6661d77570e079c7a2
|