Django 重新设置南部的迁移导致';表已存在';

Django 重新设置南部的迁移导致';表已存在';,django,django-south,Django,Django South,好吧,这让我快发疯了。我正在尝试在我的开发环境中删除并重置两个应用程序的所有south Migration,然后重新开始,因为我的migrations文件列表越来越长,我不需要它们,因为模型在不断变化,这只是开发。无论我如何尝试,south总是抱怨DB表已经存在 接下来,我首先从每个应用程序中完全删除我的迁移目录: rm -r <my-app>/migrations 同样,不用担心 现在告诉南方,我希望管理这些应用程序: python manage.py convert_to_so

好吧,这让我快发疯了。我正在尝试在我的开发环境中删除并重置两个应用程序的所有south Migration,然后重新开始,因为我的migrations文件列表越来越长,我不需要它们,因为模型在不断变化,这只是开发。无论我如何尝试,south总是抱怨DB表已经存在

接下来,我首先从每个应用程序中完全删除我的迁移目录:

rm -r <my-app>/migrations
同样,不用担心

现在告诉南方,我希望管理这些应用程序:

python manage.py convert_to_south <appname>
好的,根据我(不正确)的理解,我现在让south管理我现有的表。South知道这些表已经存在了,正如我们最初运行的一样--假的

现在我向模型添加一个新字段,运行schemamigration,然后在新模式上迁移,猜猜看,South抱怨表已经存在

django.db.utils.DatabaseError: table "_south_new_CC_coveredcall" already exists
怎么回事?我到底做错了什么

请尝试以下代码:

rm <app>/migrations/*
python manage.py schemamigration <app> --initial
python manage.py migrate <app> 0001 --fake  --delete-ghost-migrations
rm/迁移/*
python manage.py模式迁移——初始
python manage.py migrate 0001--假--删除重影迁移

警告:现在已经很晚了,我很累,但事情会是这样的:

你不需要告诉South你想迁移一个现有的应用程序(这意味着存在一个模式),你可以假装零应用程序,删除迁移,为每个应用程序创建一个新的初始迁移,并假装应用它。这基本上让南方用每个应用程序一个迁移来取代多个迁移

$ ./manage.py dumpdata myapp1 myapp2 > dumped.json  # just in case!
$ ./manage.py migrate myapp1 zero --fake
$ ./manage.py migrate myapp2 zero --fake
$ rm /path/to/myapp1/migrations/.py*
$ rm /path/to/myapp2/migrations/.py*
$ ./manage.py schemamigration myapp1 --initial
$ ./manage.py schemamigration myapp2 --initial
$ ./manage.py migrate myapp1 --fake 
$ ./manage.py migrate myapp2 --fake 

myapp1和myapp2的新0001迁移将产生与实际创建现有架构的多个迁移相同的结果,因此所有迁移都会很好地适应(只要没有自定义SQL迁移等)

多亏了所有的贡献者——事实证明,由于我在dev中使用SQlite,这是所有问题的根源。请参见关于SO的问题以了解澄清。在这里回答我自己的问题,因为它可能对其他人有用-我正在切换到mySQL,因为我上面提到的问题在我使用mySQL的PRD env中不存在。迁移可以无缝地工作。

当您运行schemamigration时,后续时间是否使用--auto修饰符?这不是真正的建议,因为我不知道这个问题的答案,但当我遇到它时,我通常会删除该应用程序的迁移历史记录,以及south_migrations表中与该应用程序相关的迁移条目。然后重新运行manage.py schemamigration myapp——初始然后迁移,后续迁移我总是使用manage.py schemamigration myapp--auto@Chris霍克斯-是的,我正在使用-自动修改器,但是谢谢你的建议,感谢所有的帮助!我在dev工作时也经常这样做,尤其是在第一次建立一个新项目时。如果您的数据库中没有任何信息,只需删除这些表,然后重新开始。@JoshBrown-这就是重点,我特别不想删除db表,我只想现在将south重置为模型状态,删除所有虚假的模式。@professorDante,啊,我明白了。也许这会有帮助?
rm <app>/migrations/*
python manage.py schemamigration <app> --initial
python manage.py migrate <app> 0001 --fake  --delete-ghost-migrations
$ ./manage.py dumpdata myapp1 myapp2 > dumped.json  # just in case!
$ ./manage.py migrate myapp1 zero --fake
$ ./manage.py migrate myapp2 zero --fake
$ rm /path/to/myapp1/migrations/.py*
$ rm /path/to/myapp2/migrations/.py*
$ ./manage.py schemamigration myapp1 --initial
$ ./manage.py schemamigration myapp2 --initial
$ ./manage.py migrate myapp1 --fake 
$ ./manage.py migrate myapp2 --fake