Работа на нескольких ветках с Flask-Migrate

1

Я использую Flask-Migrate (Alembic) для управления миграцией базы данных SQLAlchemy. Я работаю над двумя разными ветками с разными миграциями.

  1. Если я переключаю ветки, я получаю ошибку, что миграция не найдена.
  2. Если я объединяю эти ветки с родительской, мне нужно перенести версию с понижением на обе ветки и создать новую. Если я не буду, я получаю ошибку конфликта миграции.

Как я могу сделать это проще? Может быть, другой инструмент, который больше похож на миграции Django, но для Flask?

Теги:
flask
sqlalchemy
flask-sqlalchemy
flask-migrate
alembic

1 ответ

3

Alembic требует, чтобы цепочка миграций соответствовала маркеру базы данных для текущей миграции. Если вы создаете и запускаете некоторые миграции в ветки, а затем переключаетесь на другую ветку, база данных помечается как находящаяся в миграции, которой больше не существует.

Чтобы работать с несколькими ветвями при использовании миграций, вам необходимо выяснить, какова последняя общая миграция в той ветки, на которую вы переходите, а затем сначала перейти на эту версию. Затем извлеките ветку и запустите любые миграции, уникальные для нее.

Например, предположим, что вы создали две ветки из ветки "dev" с именами "feature1" и "feature2", и у каждой есть одна новая миграция после "dev". Чтобы переключиться с "feature1" на "feature2":

  1. Понизьте миграцию, добавленную к ветке, в данном случае 1: flask db downgrade -1.
  2. Оформить заказ ветка: git checkout feature2
  3. Примените любые обновления для новой ветки: flask db upgrade

Если вы не хотите терять данные из-за понижения, которое удаляет столбцы или таблицы, вам нужно вместо этого восстановить и восстановить базу данных для каждой ветки.


Если вы работаете с "feature1" и объединяете его с "dev", вам необходимо обновить "feature2", чтобы он знал о новых миграциях, которые были объединены. Alembic будет поддерживать наличие нескольких ветвей, пока присутствуют все миграции., После объединения "feature2" вы можете сгенерировать миграцию слиянием, чтобы объединить две ветки миграции обратно в одну.

  1. Объединить "feature1" с "dev": git checkout dev, git merge feature1
  2. Переключитесь на "feature2" и объедините "dev": git checkout feature2, git merge dev
  3. Запустите миграцию из "dev" и "feature2": flask db upgrade базы данных flask db upgrade
  4. Продолжайте работать над "feature2".
  5. Объединить "feature2" в "dev": git checkout dev, git merge feature2
  6. Найдите идентификаторы миграции, которые необходимо объединить: flask db heads
  7. flask db merge id1 id2, подставляя идентификаторы из предыдущего шага.
  8. Обновление до слияния, обратите внимание, что есть только одна голова: flask db upgrade flask db heads

К сожалению, это ручной процесс. Alembic требует, чтобы цепочка миграции совпадала с маркером базы данных, и нет пути к этому. Вы можете написать git hook, чтобы помочь с этим, но это не то, что уже существует.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню