2013-02-19 48 views
11

背景: 添加djangoratings到我的項目後,我試圖運行南方遷移錯誤 - 關係已經存在

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

這導致了schemamigration未知命令錯誤。 我試圖通過將我的項目目錄添加到PYTHONPATH(我使用virtualenv和virtualenvwrapper)來解決此錯誤。 這解決了schemamigration的未知命令錯誤,但我想我在PYTHONPATH的項目目錄上面指定了一個目錄,並且當初始遷移爲djangoratings運行時,它抱怨與某些有關whoosh(我在項目中使用的東西)。我改變了PYTHONPATH目錄並試圖運行

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

再次。然後我運行了遷移命令。這是我收到的錯誤:

​​

我嘗試了所有的辦法遷移回用:再次

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,但在執行遷移命令後發生同樣的錯誤。

我查看了我的數據庫中的表的列表,並沒有看到任何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」已經存在錯誤?最好使用南?

回答

13

聽起來好像South與您的數據庫不同步(如果south開始創建表格,則會發生這種情況,但如果沒有完成向後遷移,則會失敗)。我會建議手動恢復數據庫和南如下(如果出現錯誤,首先備份您的數據庫):

  1. 從您的數據庫中刪除所有djangoratings_ *表。
  2. 打開數據庫中的south_migrationhistory表,並按應用名稱進行過濾。刪除djangoratings的所有條目。
  3. 刪除djangoratings/migrations目錄下的所有遷移文件。

一旦你完成了這個,你應該有一個乾淨的數據庫和南方的歷史。此時,重新運行:

./manage.py schemamigration djangoratings --initial 

這將生成單個遷移文件。然後:

./manage.py migrate djangoratings. 

假設你沒有得到,你有第一次的錯誤,這應該建立數據庫,以便您準備使用Django評級。

+1

Thanks!我能夠毫無問題地執行遷移命令。我在數據庫中沒有任何djangoratings表或djangoratings條目,所以我只需要刪除我的遷移文件。 – Derek 2013-02-20 04:38:49

+0

沒問題,很高興它的工作。 – 2013-02-20 05:27:23

+0

我有完全相同的問題,但在新創建的數據庫上。我嘗試刪除遷移,擦除數據庫並重新安裝南,但沒有任何改變,關於如何解決它的任何想法? – SuburbanFilth 2014-08-24 10:18:43

23

有一個更好的辦法來解決這個問題:

python manage.py migrate djangoratings --fake 

然後:

python manage.py migrate 
+2

這也適用於沒有南方的Django 1.8 – aralar 2015-06-11 22:24:17

1

這是@ stef_huayue的答案的擴展,如果它沒有按照預期相當的工作。

找出哪個遷移失敗。核心問題migration_file.py通常是migrations.AddField操作發生的地方。然後運行: python manage.py migrate app_name --fake [migration_file]

沒有文件擴展名。跟着:

python manage.py migrate app_name

相關問題