12

データベースエンジンとしてSQLite3を使用して、Django(<v1.7)を使用しています。

既存のモデルのクラスに新しいフィールドを追加しようとしています。このクラスにはすでにデータが関連付けられています。

manage.py syncdb新しいフィールドをデータベースに追加していません。

次の方法はありますか?

  1. 既存のクラスに新しいフィールドを追加し、db エントリが割り当てられていることを確認しますか?

  2. 既存のすべてのデータベース エントリに対して、この新しいフィールドに空の文字列を入力しますか?

4

3 に答える 3

22

この回答はまだ可視化されていますが、時代遅れです。1.7以降、Djangoには、と同じ作成者によって作成された組み込みの移行システムが付属しており、引き続き機能しますSouthが、廃止されsyncdbました。

新しい列を自動的に追加するには、いくつかのコマンドを実行する必要があります。

python manage.py makemigrations  
python manage.py migrate

内部で何が起こっているのかを理解することは有用ですが、それが基本です。この古い投稿をまだ読んでいる場合は、1.7と移行に関する回答を得るために、新しい質問をしてください。


django<1.7の場合

syncdb新しい列は追加されません。http://docs.djangoproject.com/en/dev/ref/django-admin/#syncdbを参照してください

手動で追加する必要があります。例えば、。<>関連情報に置き換えます:

python manage.py dbshell
ALTER TABLE <appname_modelname> ADD COLUMN <column_type> DEFAULT '';

以下を使用して、Djangoがフレッシュで列を生成するために何をしたかを確認できますsyncdb

python manage.py sqlall app_name

ALTER TABLEそこからステートメントをコピーして貼り付けます。

それ以外の場合は、データベース移行ツールであるDjango-Southなどのサードパーティアプリを調べることができます。

于 2011-03-01T04:43:31.107 に答える
11

djangoに南にインストールすると、既存のテーブルを簡単に処理できます。これを確認してください

本当にDjango-Southを使用したい場合は、既存のモデルの実行に新しいフィールドを追加した後、それをdjangoにインストールしてください

python manage.py schemamigration --initial

プロジェクトアプリにファイルが作成されます。それから、

Pythonmanage.py移行

それはあなたのテーブルが変更されているということです。

于 2011-03-01T04:45:44.367 に答える
0

移行アプリには他にもオプションがあります (ただし、South が最も使用されています)。

私は自分のプロジェクトでdjango-evolutionを使用しましたが、インストールして使い始めるのは非常に簡単でした。

South はより完全なようですが、より単純なタスクには django-evolution が適している可能性があります。

于 2011-03-01T13:37:37.740 に答える