Alembic требует, чтобы цепочка миграций соответствовала маркеру базы данных для текущей миграции.Если вы создаете и запускаете некоторые миграции в ветви, а затем переключаетесь на другую ветку, база данных помечается как находящаяся в миграции, которой больше не существует.
Чтобы работать с несколькими ветками во время использования миграции, вам потребуетсячтобы выяснить, что является последней распространенной миграцией в ветви, на которую вы переключаетесь, затем сначала перейдите на эту версию.Затем извлеките ветку и запустите любые миграции, которые уникальны для нее.
Например, предположим, что вы создали две ветки из ветви "dev" с именами "feature1" и "feature2", и у каждой по одной новой миграциитак как "dev".Чтобы переключиться с «feature1» на «feature2»:
- Понизьте миграции, добавленные в ветвь, в данном случае 1:
flask db downgrade -1
. - Извлеките ветку:
git checkout feature2
- Примените все обновления для новой ветки:
flask db upgrade
Если вы не хотите терять данные из-за понижений, которые удаляют столбцы или таблицы, вам нужно выполнить дампи вместо этого восстановите базу данных для каждой ветви.
Если вы работаете с «feature1» и объедините его с «dev», вам необходимо обновить «feature2», чтобы он знал о новых миграциях, которыебыли объединены в. Alembic будет поддерживать наличие нескольких ветвей, пока присутствуют все миграции.После слияния «feature2» вы можете сгенерировать миграцию слиянием, чтобы объединить две ветви миграции обратно в одну.
- Слить «feature1» в «dev»:
git checkout dev
, git merge feature1
- Переключитесь на «feature2» и объедините «dev»:
git checkout feature2
, git merge dev
- Запустите миграцию из «dev» и «feature2»:
flask db upgrade
- Продолжитьработает над "feature2".
- Объединение "feature2" в "dev":
git checkout dev
, git merge feature2
- Найдите идентификаторы миграции, которые необходимо объединить:
flask db heads
flask db merge id1 id2
, подставляя идентификаторы из предыдущего шага. - Обновление до слияния, обратите внимание, что есть только одна голова:
flask db upgrade
, flask db heads
К сожалению, это ручной процесс.Alembic требует, чтобы цепочка миграции соответствовала маркеру базы данных, и в настоящее время нет никакого способа обойти это.Вы можете написать git hook, чтобы помочь с этим, но это не то, что уже существует.