web-dev-qa-db-ja.com

django)でデータを移行するための最良の方法は何ですか

モデルにいくつかの変更を加えた後(たとえば、モデルの新しいフィールドと新しいモデル)、これらの変更を入力済みデータベースに反映するための最良の方法は何ですか?


PS:評価された1つの場所で多くのソリューションを見たかったのです。どうやらもっと多くの解決策がすでにリストされています ここ

28
hamdiakoguz

私は同様の質問をしました ここ そしてかなりの数の答えを得ました。

SQLを使用して手動でダンプとリロードを行う、フィクスチャを使用する、Djangoの「新しい」スキーマ進化パッケージの1つを使用するなど、これを行う方法は非常にたくさんあります。

17
Farinha

もう1つの手法は、dumpdata引数とloaddata引数を使用してmanage.pyを実行し、その間にデータベースを強制終了することです。

  1. python manage.py dumpdata > dump.json
  2. 外部ツールを使用して、影響を受けるテーブルを削除するか、データベース全体を強制終了します
  3. python manage.py loaddata dump.json

詳細については、 manage.py docs を参照してください。

23
shacker

Djangoには独自の移行が組み込まれており、次の場所に文書化されています。

https://docs.djangoproject.com/en/dev/topics/migrations/

3
Stian Jensen

変更の範囲によって異なります。それがALTERを超えている場合、あなたは大手術を行っています。モデルとデータベースのバックアップを作成して、元に戻せるようにします。

私の好みは、新しい(改訂、修正、拡張された)モデルを新しいアプリケーションとして配置することです。 URLなどはなく、モデルだけです。

  1. 新しいアプリケーションとして新しいモデルを作成します。テストを作成して、それが機能することを確認します。
  2. syncdbを使用して、新しいモデルのこの暫定的な実装を構築します。
  3. 古いモデルを照会し、新しいモデルをロードするための小さな1回限りのユーティリティを作成します。これを純粋なSQLで試してみることをお勧めします。私は単純なクエリを作成し、ループを構築して保存することを好みます。
  4. 新しいモデルが読み込まれた後、これをJSONファイルにダンプできます。

古いモデルからデータを取り出したら、希望する新しい形式でDBを再構築できます。

  1. 新しいモデルを既存のアプリケーションに移動します。
  2. アプリケーションのテーブルの古いバージョンを削除します。
  3. syncdbを使用して、新しいテーブルを作成します。
  4. JSONファイルにデータをロードします。
3
S.Lott

Manage.py sqlallで新しい列のパラメーターを確認し、Alterテーブルステートメントを使用してデータベースに手動で追加します。このようにして、データベースをやり直す必要はありません。ただし、SQLの知識が必要です...

見てください ここ (「データベーススキーマに変更を加える」までスクロールダウンしてください)

2
fijter

Perform these steps in order may help you

For more details,

ここをクリック: http://south.readthedocs.org/en/latest/

1)python manage.py schemamigration apps.appname --initial

上記の手順では、デフォルトで移行フォルダが作成されます。

2)python manage.py migrate apps.appname --fake

偽の移行を生成します。

3)python manage.py schemamigration apps.appname --auto

次に、必要に応じてフィールドを追加し、上記のコマンドを実行できます。

4)python manage.py migrate apps.appname

次に、ファイルをデータベースに移行します。

0