Ste*_*eve 188 django django-south
我正试图开始南方.我有一个现有的数据库,我添加了South(syncdb,schemamigration --initial).
然后,我更新models.py了添加字段并运行./manage.py schemamigration myapp --auto.它似乎找到了该领域并说我可以应用它./manage.py migrate myapp.但是,这样做会给出错误:
django.db.utils.DatabaseError: table "myapp_tablename" already exists
Run Code Online (Sandbox Code Playgroud)
tablename是第一个列出的表models.py.
我正在运行Django 1.2,South 0.7
Ash*_*hok 310
由于您已经在数据库中创建了表,因此您只需将初始迁移作为伪造运行
./manage.py migrate myapp --fake
Run Code Online (Sandbox Code Playgroud)
确保模型的模式与数据库中的表的模式相同.
pie*_*zym 41
虽然表"myapp_tablename"已经存在,但在我执行./manage.py迁移myapp --fake之后错误停止提升,DatabaseError显示没有这样的列:myapp_mymodel.added_field.
得到完全相同的问题!
1.首先检查导致此问题的迁移号码.让我们假设它是:0010.
你需要:
./manage.py schemamigration myapp --add-field MyModel.added_field
./manage.py migrate myapp
Run Code Online (Sandbox Code Playgroud)
如果缺少多个字段,则必须为每个字段重复该字段.
3.现在您需要进行一系列新的迁移,因此请从myapp/migrations中删除他们的文件(0011以及如果您需要添加多个字段).
跑这个:
./manage.py migrate myapp 0010
Run Code Online (Sandbox Code Playgroud)
现在尝试./manage.py迁移myapp
如果它没有失败你就准备好了.如果没有丢失任何字段,只需双重检查.
编辑:
如果您有一个安装了South的生产数据库,并且在其他环境中创建的第一个初始迁移重复了您在db中已有的内容,则也会发生此问题.这里的解决方案更容易:
假第一次迁移:
./manage migrate myapp 0001 --fake
与剩余的迁移一起滚动:
./manage迁移myapp
ben*_*hor 10
当我遇到这个错误时,它有不同的原因.
在我的情况下,南不知何故在我的数据库中留下了一个临时的空表,它在_remake_table()中使用.可能我以一种我不应该拥有的方式中止了迁移.在任何情况下,每次后续的新迁移,当它调用_remake_table()时,都会抛出错误sqlite3.pypysqlite2.dbapi2.OperationalError: table "_south_new_myapp_mymodel" already exists,因为它确实存在并且不应该存在.
_south_new对我来说很奇怪,所以我浏览了我的DB,看到了桌子_south_new_myapp_mymodel,抓了我的头,看着南方的来源,认定它是垃圾,掉了桌子,一切都很顺利.
| 归档时间: |
|
| 查看次数: |
63052 次 |
| 最近记录: |