Как синхронизировать базу данных с Flask-Migrate в новом развертывании приложения?

При развертывании приложения на новом сервере (т. Е. База данных пуста), как правильно синхронизировать базу данных с Flask-Migrate?

Я добавил Flask-Migrate в проект, когда у меня уже была схема, поэтому у меня нет "первоначальной" миграции со всеми create_table(), Теперь, когда я делаю manage.py db upgrade в моем сценарии развертывания я получаю relation "..." does not exist,

Есть ли встроенный способ обнаружения пустой базы данных и запуска "create_all()" вместо миграции? Это то, что предлагает поваренная книга Alembic's. Поскольку я уже использую Flask-Migrate, я ищу какой-то единый способ борьбы с миграциями.

1 ответ

Решение

Идеальное решение заключается в том, что вы генерируете начальную миграцию для своей схемы БД, как в тот день, когда вы начали отслеживать миграции с помощью Flask-Migrate и Alembic.

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

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

Если это кажется слишком большой работой, то другой альтернативой является то, что вы используете db.create_all() генерировать базу данных до последней миграции, а затем ./manage.py db stamp head сообщить Alembic, что он должен считать базу данных обновленной.

Другие вопросы по тегам