12

背景: プロジェクトに djangoratings を追加した後、実行してみました

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

その結果、schemamigration で不明なコマンド エラーが発生しました。プロジェクト ディレクトリを PYTHONPATH に追加して、このエラーを解決しようとしました (virtualenv と virtualenvwrapper を使用しています)。これで schemamigration の不明なコマンド エラーは解決されましたが、PYTHONPATH にプロジェクト ディレクトリの 1 つ上のディレクトリを指定したと思います。djangoratings の最初の移行が実行されたときに、whoosh (プロジェクトで使用している) と関係があると不平を言いました。 . PYTHONPATH ディレクトリを変更して実行してみました

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local

また。次に、移行コマンドを実行しました。これは私がエラーを受け取ったときです:

django.db.utils.DatabaseError: relation "djangoratings_vote" already exists

私は以下を使用してずっと前に移行しようとしました:

django-admin.py migrate djangoratings zero --settings=myapp.settings.local
Running migrations for djangoratings:
- Migrating backwards to zero state.
< djangoratings:0006_add_cookies
< djangoratings:0005_add_exclusions
< djangoratings:0004_rethink_recommendations
< djangoratings:0003_add_correlations
< djangoratings:0002_add_mean_and_stddev
< djangoratings:0001_initial

その後 --initial を再度実行しましたが、migrate コマンドの実行後に同じエラーが発生しました。

データベース内のテーブルのリストを調べましたが、djangoratings_vote が見つかりませんでした。

djangoratings の現在の移行リストは次のとおりです。

0001_initial.py                   0006_add_cookies.py
0001_initial.pyc                  0006_add_cookies.pyc
0002_add_mean_and_stddev.py       0007_initial.py
0002_add_mean_and_stddev.pyc      0007_initial.pyc
0003_add_correlations.py          0008_initial.py
0003_add_correlations.pyc         0008_initial.pyc
0004_rethink_recommendations.py   0009_initial.py
0004_rethink_recommendations.pyc  0009_initial.pyc
0005_add_exclusions.py            __init__.py
0005_add_exclusions.pyc           __init__.pyc

リレーション「djangoratings_vote」がすでに存在するというエラーを解決するにはどうすればよいですか? できれば南を使用しますか?

4

3 に答える 3

24

それを解決するより良い方法があります:

python manage.py migrate djangoratings --fake

その後:

python manage.py migrate
于 2015-02-05T08:00:42.817 に答える
13

South がデータベースと同期していないように思えます (これは、south がテーブルの作成を開始したが、後方移行を完了できずに失敗した場合に発生する可能性があります)。次のようにデータベースと南を手動で復元することをお勧めします(間違いが発生した場合に備えて、最初にデータベースをバックアップしてください)。

  1. データベースからすべての djangoratings_* テーブルを削除します。
  2. データベースの south_migrationhistory テーブルを開き、アプリ名でフィルター処理します。djangoratings のすべてのエントリを削除します。
  3. djangoratings/migrations ディレクトリにある移行ファイルをすべて削除します。

これが完了すると、クリーンなデータベースと南の歴史が得られます。この時点で、次を再実行します。

./manage.py schemamigration djangoratings --initial

これにより、単一の移行ファイルが生成されます。それで:

./manage.py migrate djangoratings.

最初に発生したエラーが発生しないと仮定すると、これでデータベースがセットアップされ、django 評価を使用する準備が整います。

于 2013-02-20T01:47:49.867 に答える
1

期待どおりに機能しない場合、これは@stef_huayueの回答の拡張です。

どの移行が失敗したかを調べます。対応する migration_file.py は通常、migrations.AddField操作が行われる場所になります。次に実行します。 python manage.py migrate app_name --fake [migration_file]

ファイル拡張子なし。に続く:

python manage.py migrate app_name

于 2015-11-09T15:34:41.157 に答える