2016-03-24 1 views
0

У меня есть flask-migrate (версия 1.8.0), хорошо работающая с базой данных sqlite в среде разработки. Теперь я хотел бы перенести наши данные в MySQL и сохранить всю историю миграции (поэтому он остается в синхронизации с нашими моделями Flask-SQLAlchemy в нашем репозитории git).Как использовать Flask-migrate в нескольких средах разработки

Я создал пустую базу данных MySQL, и после изменения моего SQLALCHEMY_DATABASE_URI, я попытался запустить:

python manage.py db upgrade 

Это привело к ошибке о не в состоянии отказаться от таблицы migrate_version. (. Что имеет смысл, так как это новая база данных, хотя SQLite фактически содержит таблицу «alembic_version» не «migrate_version»)

Итак, я пытался инициализировать эту новую базу данных:

python manage.py db init 

Теперь я получите сообщение об ошибке: «Переходы каталога уже существуют».

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

Я видел в документах Flask-Migrate поддерживает несколько баз данных, но я думаю, что это будет больше для поддержки нескольких баз данных в одной среде разработки. Есть ли способ, чтобы Flake-Migrate отслеживал изменения в нескольких средах разработки?

ответ

0

Таблица migrate_version используется для отслеживания миграции по пакету sqlalchemy-migrate. Alembic, пакет, используемый Flask-Migrate, использует таблицу alembic_version, как вы знаете.

Итак, я предполагаю, что эта база данных MySQL, которую вы хотите использовать, ранее использовалась приложением, которое находилось под управлением sqlalchemy-migrate.

Я рекомендую вам удалить базу данных MySQL и создать совершенно новую.

+0

Спасибо за предложение. Я заново создал базу данных, запустил 'python manage.py db upgrade', но все равно возвратил ошибку' sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1051 (42S02): Неизвестная таблица 'sps.migrate_version '[SQL: u' \ nDROP TABLE migrate_version '] ' – AmZar

+0

Вы« сбросили »базу данных и сделали совершенно новую, как я предложил? Кажется, вы не сделали этого, основываясь на ваших комментариях. – Miguel

+0

Да. Я сбросил db и заново создал его. Я также попытался создать схему с новым именем. Однако ваша заметка о sqlalchemy-migrate помогла. У меня были установлены как sqlalchemy-migrate, так и flask-migrate. Я удалил первый. Я все же получил те же результаты. – AmZar

0

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

Инициализировать новую пустую базу данных, используя другую папку для "новых" миграций

python manage.py db init -d tmp 

Создать миграцию

python manage.py db migrate -d tmp -m "Bring MySQL up to date" 

Применить миграцию

python maange.py db upgrade -d tmp 

Теперь вы можете удалите папку миграции «tmp». Вам это больше не нужно. Найдите миграцию HEAD. Посмотрите на 'Rev: your_revision_num (голова)'

python manage.py db show 

Запуск оператора обновление против вашей базы данных MySQL

update alembic_version set version_num = 'your_revision_num' 

Теперь ваша схема базы данных MySQL должна соответствовать вашей старой SQLite схемы, и вы будете иметь ваша полная история миграции.

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

  • Нет связанных вопросов^_^