2016-03-24 13 views
0

開発環境では、フラスコマイグレーション(バージョン1.8.0)がsqliteデータベースとうまく機能しています。今私は私たちのデータをMySQLに移行し、私たちの移行履歴をすべて維持したいと思います(私たちのgitリポジトリのFlask-SQLAlchemyモデルと同期しています)。複数の開発環境でFlask-migrateを使用するには

私は、空のMySQLデータベースを作成し、そして私のSQLALCHEMY_DATABASE_URIを変更した後、私が実行している試みた:

python manage.py db upgrade 

テーブルmigrate_versionをドロップすることができない程度の誤差を生じたこと。 (。どちらこれは、新しいデータベースであるため、sqliteのは実際にはない「migrate_version」「alembic_version」テーブルが含まれていますが、理にかなって)

だから、私はこの新しいデータベースを初期化してみました:

python manage.py db init 

今私は、 「ディレクトリの移行はすでに存在しています」というエラーが表示されます。

私はそのフォルダの名前を変更して問題なくコマンドを再実行できますが、以前の移行はすべて失われます。テスト環境や運用環境に移行するときも同じ問題があると思います。

Flask-Migrateは複数のデータベースをサポートしていますが、1つの開発環境で複数のデータベースを管理する方が多くなると思います。 Flask-Migrateに複数の開発環境で変更を追跡させる方法はありますか?

答えて

0

migrate_versionは、パッケージsqlalchemy-migrateによる移行を追跡するために使用されます。 Flask-Migrateが使用するパッケージAlembicは、ご存じのように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 maange.py db upgrade -d tmp 

を移行

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

を作成し、あなたの "新しい" 移行のために別のフォルダを使用して、新しい空のデータベースを初期化し、することができます「tmp」移行フォルダを削除します。あなたはもはやそれを必要としません。 HEADの移行を確認します。

python manage.py db show 

実行して、MySQLデータベース

update alembic_version set version_num = 'your_revision_num' 

に対するUPDATE文今すぐあなたのMySQLデータベースのスキーマが古いSQLiteのスキーマと一致する必要があり、あなたが持っているでしょう: 'your_revision_num(ヘッド)改訂' を探してくださいあなたのフルマイグレーション履歴。

関連する問題