>>> На главную <<<

Alembic

Тулза для миграции ДБ в [sqlalchemy] на python

документация

Базовые принципы

Создание окружения для миграции

Через alembic init folder

Создается вот такая структура:

- yourproject/
  - alembic/
    - env.py
    - README
    - script.py.mako
    - versions/
      - 3512b954651e_add_account.py
      - 2b1ae634e5cd_add_order_id.py
      - 3adcc9a56557_rename_username_field.py

Здесь env.py определяет инструкции для миграций. script.py.mako генерирует новые скрипты миграции, а в versions/ хранятся все версии миграций.

alembic list_templates выведет все шаблоны миграций

Теперь можно сконфигурировать файл alembic.ini

Для началанам будет достаточно указать расположение БД, например так:

sqlalchemy.url = sqlite:///./test.db

Создание миграции

Мы можем создать новую версию миграционного скрипта так: alembic revision -m "create account table"

Запуск миграций

alembic upgrade head

Еще команды

Кроме того, в скрипте миграции содержится информация об ID миграции

revision = 'ae1027a6acf'

Можно использовать команды типа alembic upgrade ae1 чтобы запускаться относительно специфического скрипта. Если несколько скриптов удовлетворяют идентификатору, действия будут остановлены и будет выдано сообщение.

Автогенерация миграций

Алембик может смотрет ь в статус ДБ и генерировать миграции автоматически. Это делается с помщью alembic revision --autogenerate. Чтобы использовать автогенерацию, необходимо модифицировать env.py, что-бы предоставить доступ к контенту таблиц. Вместо:

target_metadata = None

использовать

from myapp.mymodel import Base
target_metadata = Base.metadata

Далее выполняем alembic revision --autogenerate -m "migration name"

Что может, а что не может автомиграция?

Может задетектить:

Опционально может задетектить:

Не может задетектить:

Пока нельзя, но в будущем станет возможно:

Всегда нужно контроллировать что именно сгенерировал алембик.

Autogenerating Multiple MetaData collections

Controlling What to be Autogenerated - параметры автогенерации

Comparing and Rendering Types проверка типов

Applying Post Processing and Python Code Formatters to Generated Revisions

Добавление функций, выполняемых после создания миграции алембиком.

Остальная часть книги посвязена работе в больших проектах и деталям:

[sqlalchemy]

>>> На главную <<<