22

DB のテーブルをクリアしたかったので、テーブルを削除しました。通常、私はそれmanage.py syncdbを再作成します。ただし、ここでの回答は、もう使用しないことを示していsyncdbます。それで、私は代わりに何をしますか?

4

5 に答える 5

41

これはかなり遅い応答ですが、同じ問題に遭遇する人向けです (私のように)。

通常、south によって管理されているアプリの db_tables を削除するには、次を使用する必要があります。

python manage.py migrate appname zero

しかし、それらをデータベースに手動でドロップした場合は、南に知らせてください

python manage.py migrate appname zero --fake

そしてもちろん、テーブルを再作成するために

python manage.py migrate appname
于 2012-11-23T16:12:39.360 に答える
27

同じ問題がありました。これがすべての状況で機能するかどうかはわかりませんが、私が行ったことは次のとおりです。

  1. INSTALLED_APPSから「south」をコメントアウトします
  2. manage.pysyncdbを実行します
  3. INSTALLED_APPSの「south」のコメントを解除します
  4. manage.pymigrateを実行します

出来上がり!

あなたのマイレージは異なる場合があります....

于 2011-08-26T01:46:52.677 に答える
2

うーん、この交換は私の質問そのものをカバーしています:

データベースを手動で変更しても、South は気付かないでしょう。データベースのバージョンを追跡する唯一の方法は、south_migrationhistory テーブルです。

私が最終的にやったのは、問題でドロップしたモデルをコメントアウトし、 を実行し、ドロップしたモデルschemamigrationの空の列のないテーブルを作成し (サウスにはドロップするものがあるため)、モデルのコメントを外しmigrateschemamigrationそしてmigrate再び。テーブルを落とすよりも少し面倒ですsyncdbが、まあ。

于 2011-03-16T16:15:48.583 に答える
1

すべての移行が適用されていることを確認します。 python manage.py migrate

モデルにあるようにテーブルを作成するように Django に指示します。python manage.py syncdb

すべてがあるべき場所にあることを南に伝えます。python manage.py migrate appname --fake

これは、最後の移行を作成してから、どのモデルでも何も変更されていないことを前提としています。

于 2013-06-28T23:01:26.407 に答える
0

この問題が古いことは知っていますが、この問題に遭遇したばかりで、これが誰かに役立つ場合に備えて解決策を投稿すると思いました.

  1. models.pyデータベースがあるフォルダーに移動します。
  2. クラス全体をmodels.pyファイルから切り取ります。
  3. ./manage.py schemamigration --auto を実行します (これにより、このテーブルの削除を認識するappname別の移行が作成されます)。Southデータベースに空のテーブルを再作成する必要がある場合がありますSouth
  4. を実行するmigrationと、テーブルがデータベースから削除されます。
  5. テーブル クラスをファイル内の場所に再度貼り付けmodels.pyます。
  6. ./manage.py schemamigration appname--auto を実行します。南側がテーブルをピックアップし、移行を許可する必要があります
  7. ./manage.py migrateを実行するappnameと、South はテーブルをデータベースに再度追加する必要があります... 列などを再度追加しますが、明らかにデータはありません。:)
于 2013-11-23T03:06:51.163 に答える