2017-03-24 20 views
3

これは持っているとalembic/flask-migrateを使用して既存のデータベースを移行する方法を追加しますか?

  • 0日目に起こっている出来事の連鎖である:私は1日目
  • 私のアプリを開発し、展開:私は私がしたかったの実現:私は、新しいデータベース
  • 3日目を作成します既存のテーブルに新しい行を追加します。フラスコ・マイグレーションが見つかりました。データベースをマイグレーションするために使用したいのですが。

現在、私はあなたが0日目から開始する場合は、単にflask db initflask db migrateと​​を呼び出し実行しているフラスコは、移行を取得する方法についてのドキュメンテーションの多くがありますが3日目

でいます。

しかし、私の場合は少し異なります。私はコマンドを実行し、私の最初のバージョンはです。その後、データベーススキーマを変更して、新しい移行を生成しました。今私の最新の移行はテーブルに新しい行を追加する1行の移行しかありません。

私は私のマイグレーションのどれもあなたが開始した場合、私はクローンにした場合は1日目

にフラスコを、移行あなたが見る最初に移行することになっているデータベースを作成するために、実際のスキーマを、持っていないことに気づき

ゼロからのレポ:

flask db migratealembic.util.exc.CommandError: Target database is not up to date.になります。

​​は、sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "offer" does not existになります。

これを解決するにはどうすればよいですか?

答えて

6

2つのオプションがあります。

1)あなたが唯一の移行リポジトリを作成するには、前方

  • 実行flask db initを行くデータベースの移行を追跡する場合。
  • データベースモデルに新しい列を追加します。
  • 実行flask db migrateを実行して移行を生成します。移行スクリプトには新しい列のみが含まれます。
  • ​​を実行して、データベースに新しい移行を適用します。

この時点で、データベースに新しい列があり、作業を続けることができます。追加の変更が必要な場合は、上記の手順を繰り返します。

この方法では、データベース全体をゼロから再作成することはできません。 1日目に持っていたスキーマにデータベースを初期化してから、移行履歴を適用して現在のスキーマにアップグレードする方法が必要です。

2)Flaskを追加する日のスキーマを含め、移行履歴全体を追跡したい場合は、アプリケーションに移行します。

これはややこしいことですが、実行することができます。

  • flask db initで始まり、移行リポジトリを作成します。
  • 次に、データベースが空であると考えてFlask-Migrateをトリックする必要があります。これは、実際のdbの名前を変更し、同じ名前の新しいdbをテーブルに作成しないで作成できます。その状態で、flask db migrateを実行します。これにより、データベースのスキーマ全体を含む移行が生成されます。
  • 最初に移行したら、データベースを正しい状態に復元します。
  • flask db stamp headを実行して、データベースを更新済みとしてマークします。
  • データベースモデルに新しい列を追加します。
  • 再度flask db migrateを実行して、2番目の移行を生成します。移行スクリプトには新しい列のみが含まれます。
  • ​​を実行して、データベースに新しい移行を適用します。

+0

私は2番目の 'フラスコのdb migrate'を実行すると、' alembic.util.exc.CommandError:ターゲットデータベースが最新ではありません.'というメッセージが表示されます。最初にデータベースを最新にするために必要なこと(Djangoの偽の移行など)がありますか? –

+1

あなたは正しいです、私はこれらの指示のステップを逃した。私は 'db stamp head'コマンドを追加して投稿を修正しました。 – Miguel

+0

多くの感謝!それは私のためにすべてを並べ替えました。 –

関連する問題