Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlalchemy_shifter-0.1.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlalchemy_shifter-0.1.0-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

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

Hashes for sqlalchemy_shifter-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4901f188f92bdb44d9e4c2551cdbbe6eebcca735bfef3afd533416f93a25a4e7
MD5 0788bc485a4c3c878f7c59f76fd379b7
BLAKE2b-256 3cf46a48742a9535f72e22ba6f6242e31868c7e138c3448e7a3783488bcd5b31

See more details on using hashes here.

File details

Details for the file sqlalchemy_shifter-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlalchemy_shifter-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65cee4d20dcfe3630f4e9366a12aaacee596ea150f0583f47610d600b2a9d23e
MD5 494f03cf1c9f7d1bf82e0332aa2159ae
BLAKE2b-256 ad1b3beaa2eae66320f1943bf0655b98ee9b7d98124edc6661d77570e079c7a2

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