2013-02-19 34 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

相关问题