Я пытаюсь использовать перегонные миграции для работы с разными версиями одной и той же базы данных. Например, у меня есть две базы данных, одна живая и одна для тестирования. Каждый из них может находиться в разных состояниях миграции. Во-первых, тестовая база данных может вообще не существовать.
Скажем, у 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 автоматически создает полную таблицу, если она не существует.
Должен ли я просто ловить ошибку или есть лучший способ сделать это?