Миграция Alembic, действующая на разные версии одной и той же базы данных

Я пытаюсь использовать перегонные миграции для работы с разными версиями одной и той же базы данных. Например, у меня есть две базы данных, одна живая и одна для тестирования. Каждый из них может находиться в разных состояниях миграции. Во-первых, тестовая база данных может вообще не существовать.

Скажем, у live есть таблица table1 со столбцами A и B. Теперь я хотел бы добавить столбец C. Я изменяю свою модель, чтобы включить C, и создаю сценарий миграции со следующим кодом

op.add_column('table1', sa.Column('C', sa.String(), nullable=True))

Это прекрасно работает с существующей базой данных live.

Если я сейчас вызову alembic upgrade head, ссылаясь на несуществующую базу данных test, я получу ошибку (Operational Error) duplicate column name.... Я предполагаю, что это связано с тем, что моя модель содержит столбец C, и что alembic/sqlalchemy автоматически создает полную таблицу, если она не существует.

Должен ли я просто ловить ошибку или есть лучший способ сделать это?


person Tammo Heeren    schedule 02.12.2014    source источник


Ответы (1)


Я бы посоветовал сразу после того, как ваша тестовая БД была создана, вы должны пометить ее головой

command.stamp(configs_for_test_db, 'head')  

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

person karina    schedule 07.10.2015