2

私は既存のクラスモデルを持つプロジェクトを持っています

class Disability(models.Model):
    child = models.ForeignKey(Child,verbose_name=_("Child"))

しかし、最近のアーキテクチャの変更により、次のように変更する必要があります

class Disability(models.Model):
    child = models.ManyToManyField(Child,verbose_name=_("Child"))

この新しい変更のために..(新しいデータベース用に既存のデータベースを変更する必要があります)手動で行うよりも、データ移行が最善の方法だと思います。

私はこのオンラインドキュメントを参照しました

http://south.readthedocs.org/en/latest/commands.html#commands-datamigration

しかし、データの移行についてはほとんどありません。およびスキーマの移行についての詳細。

質問1 。スキーマの移行を行うと、その古いモデルに属する以前のデータがすべて失われます。

質問2 。私はスキーマ移行のためにトリングしていますが、これを求めています...

 (rats)rats@Inspiron:~/profoundis/kenyakids$ ./manage.py schemamigration web --auto 
  ? The field 'Disability.child' does not have a default specified, yet is NOT NULL.
  ? Since you are removing this field, you MUST specify a default
  ? value to use for existing rows. Would you like to:
  ?  1. Quit now, and add a default to the field in models.py
  ?  2. Specify a one-off value to use for existing columns now
  ?  3. Disable the backwards migration by raising an exception.
  ? Please select a choice: 1

誰でもスキーマとデータ移行の概念と違い、およびこれを個別に実現する方法を説明できますか?

4

2 に答える 2

3

スキーマとデータの移行は、テーブル構造を変更するために使用できる別のオプションではありません。それらは完全に異なるものです。もちろん、データの移行については South のドキュメント に詳しく説明されています。

ここでは、スキーマを変更する必要があるため、データ移行は役に立ちません。South やその他の移行システムの要点は、データを失うことなく移行できることです。

于 2013-01-14T13:22:51.223 に答える
1
  1. South は、テーブル データを一時テーブルに移動してトランザクションを実行しようとし (間違っている可能性があります)、テーブルを再構築し、元のデータを新しい構造に追加しようとします。このような:

old_table -> クローン -> tmp_table

old_table -> 再構築

tmp_table.data -> テーブル

South は、フィールド タイプを調べます。大きな変更がある場合は、何をすべきか尋ねられます。たとえば、テキスト フィールドを int フィールドに変更すると、変換が非常に難しくなります :)

  1. フィールドを削除しても、古い構造に戻すことができるようにしたい場合があるため、古い構造でテーブルを作成できるようにするには、south に既定のデータが必要になります。

テーブル構造とフィールド タイプを変更する可能性があるため、データの移動は常に問題になります。たとえば、Char(max_length=100) から Char(max_length=50) までのデータを手動で処理するにはどうすればよいでしょうか?

最良の提案は、適切なバックアップを保持することです。また、djangos フィクスチャも利用してください。南への移行とともに、さまざまなデータ構造のフィクスチャを保存できます。

South は、syncdb と同じ方法で initial_data ファイルをロードしますが、移行プロセスが成功するたびにそれらをロードします。

http://south.readthedocs.org/en/latest/commands.html#initial-data-and-post-syncdb

于 2013-01-14T14:03:20.733 に答える