2016-02-07 2 views
3

В платформе с использованием Flask, SQLAlchemy и Alembic нам постоянно нужно создавать новые отдельные экземпляры с собственным набором ресурсов, включая базу данных.SQLAlchemy, Alembic и новые экземпляры

При создании нового экземпляра SQLAlchemy's create_all предоставляет нам базу данных со всеми обновлениями до момента создания экземпляра, но это означает, что этот новый экземпляр не имеет истории миграции, которая имеет более старые экземпляры. В нем нет таблицы исправлений Alembic, указывающей на последнюю миграцию.

Поэтому, когда пришло время обновить как старые экземпляры (с историей миграции), так и новый экземпляр без истории переноса, мы должны либо предоставить экземпляру new пользовательский набор ревизий (игнорируя старые миграции, чем сама база данных), либо создать историю фальшивых миграций для него и использование глобального набора миграций. Пару раз, что это произошло, мы сделали последнее.

Выполняет корневую миграцию, которая устанавливает всю базу данных так же, как и до первой миграции, а затем запускает все миграции вместо create_all - лучший вариант для начальной загрузки базы данных новых экземпляров?

Я забочусь о масштабируемости этого, поскольку количество миграций увеличивается.

Возможно ли еще один вариант?

ответ

1

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

  1. экземпляра установки
  2. запустить create_all
  3. Alembic головы (определить последнюю доступную версию в сценарии директории)
  4. Alembic печать

Вот док из командной строки:

stamp 'stamp' the revision table with the given revision; don't run any migrations.

+0

Спасибо за ответ, то, что вы описали, в основном то, что мы сделали до сих пор, только вручную. Создает ли штамп таблицу, если она еще не существует? – RobertoCuba

+0

Да, да. Просто протестировал его. –

Смежные вопросы