Django Southによる後方移行


217

わかりました、これは質問するのは本当にばかげているように思えます、そして私はどこかで何かを逃していると確信しています。

DjangoでSouthを使用して後方移行を実行するにはどうすればよいですか?

モデルを微調整し、を使用して移行を作成しschemamigration、を使用して移行を実行しましたがmigrate、今はそれが私が望んでいたものではなく、以前の方法に戻したいことに気付きました。

dbテーブルを手動で編集して移行ファイルを削除する以外に、移行をロールバックするにはどうすればよいですか?Googleを介してSouthを使用した後方移行への参照を見つけましたが、そのための確実なコード例をまだ見つけていません。

誰か助けてもらえますか?


良い質問!!
マーシャルX

回答:


335

ロールバックするマイグレーションの直前に、マイグレーションの数を把握する必要があります。

アプリにはmigrationsディレクトリがあり、その中にファイルの名前が

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

通常、を実行すると./manage.py migrate your_app、Southはすべての新しい移行を順番に実行します。(データベーステーブルを調べて、「新しい」テーブルを決定します)。

ただし、移行を番号で指定することもでき、Southはデータベースを前方または後方に移行して、その時点まで移行します。したがって、上記の例のファイルで、すでに0003に移行していて、0003を逆方向に実行したい(元に戻す、効果的に)場合は、次のように実行します。

./manage.py migrate your_app 0002

サウスはデータベースを見て、すでに0003が実行されていることを認識し、0002に戻るために0003の逆マイグレーションを実行する必要があると判断します。


1
残念ながら、次の移行を作成するときには、その間の移行はスキップされないため、後でもう一度移行するだけです。より良い方法があるかもしれないようです。
mlissner 2011

44
@mlissner本当に必要な場合は、データベースをロールバックした後、特定のアプリのマイグレーションフォルダー(上記の例ではyour_app / migrations)に移動し、不要なマイグレーションを削除します
Josh Russo

1
まさに-Southは移住を決してスキップしない。nnnnの値にかかわらず、0001-nnnnからのファイルは一貫した移行のセットを表すと想定しています。そうでない場合は、問題のあるものを自分で再注文または削除する必要があります。
Ian Clelland、2011

217

誰か(私のような)が最初の(0001)から移行する方法を疑問に思った場合に備えて:

django-admin.py migrate some_app zero

出力:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

「ゼロ」は、移行前の特別な状態です。

リファレンス:http : //south.aeracode.org/docs/commands.html


6
誰かが0001 --fakeを実行しましたが、これが0001を逆方向に実行する唯一の方法でした。ありがとう!
jmanning2k 2012

1
非常に重要な答えmigrate 0000です。なぜうまくいかないのかと思いました。偽の移行については、はい。たとえば、(おそらく間違った)初期移行のみを元に戻す必要があるが、移行の履歴では、この移行は行われなかったと考えられている場合に、必要になることがあります。
Tomasz Gandor 2014年

3

パラメータの最後に移行名を追加します。

./manage.py migrate app-name 00xx-migration-name

2
それは大丈夫です、そして私は以前にそれをしましたが、それは多くのタイプ/ペーストです。裸の「状態」番号(この場合00xx)で十分です。移行を改善してテストする場合、履歴に両方のコマンドを含めることができます。前の(番号なし)、前の状態番号の後ろのコマンドです。
Tomasz Gandor 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.