SQLAlchemy, Alembic и новые экземпляры

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

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

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

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

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

Может есть вообще другой вариант?


person RobertoCuba    schedule 07.02.2016    source источник


Ответы (1)


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

  1. экземпляр установки
  2. запустить create_all
  3. перегонные головки (для определения последней версии, доступной в каталоге скриптов)
  4. штамп перегонного куба

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

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

person Ian Wilson    schedule 08.02.2016
comment
Спасибо за ответ, то, что вы описываете, в основном то, что мы делали до сих пор, только вручную. Штамп создает таблицу, если она еще не существует? - person RobertoCuba; 15.02.2016
comment
Да, это так. Только что проверил. - person Ian Wilson; 15.02.2016