python manage.py migrate 降落错误
我想用 South 迁移我的应用 "landing",所以我输入了以下命令:
python manage.py migrate landing
但是它显示了以下错误:
正在为 landing 运行迁移:
- 正在向前迁移到 0003_auto__chg_field_userinput_email2。 landing:0001_initial
致命错误 - 以下 SQL 查询失败:创建表
landing_userinput
(id
整数 自动增加 不为空 主键,name
字符串(120) 不为空,city
字符串(120) 不为空,timestamp
日期时间 不为空)错误信息是: (1050, "表 'landing_userinput' 已经存在") ! 在迁移的实际运行中发现错误!正在中止。
! 由于你的数据库不支持在事务中运行 ! 修改模式的语句,我们不得不将其留在迁移之间的临时状态。
! 你 可能 能通过以下方式恢复: = 删除表
landing_userinput
级联; []引发错误类,错误值
django.db.utils.OperationalError: (1050, "表 'landing_userinput' 已经存在")
请给我一些建议来解决这个错误。
1 个回答
不要同时使用 syncdb
和 migrate
;这样会产生冲突,因为初始迁移会创建一个空表。
如果你有一个新的应用程序,并希望用 south 来管理它,操作步骤如下:
./manage.py schemamigration landing --initial
-- 这一步是创建初始迁移,它会为你的应用程序创建表。你只需要做这一步 一次。./manage.py migrate landing
-- 这一步会应用迁移。第一次执行这条命令(配合上面的第一步),会在数据库中创建一个空表。
完成前两步后,每当你对模型进行更改时,都需要运行这两条命令:
./manage.py schemamigration landing --auto
-- 这条命令会创建一个包含你模型更改的文件(即迁移)。./manage.py migrate landing
-- 这条命令会应用新的迁移(和上面的一样);它会影响到你的数据库更改。
如果你已经有一个现有的应用程序,先安装 south,然后运行 syncdb
来创建 south 自己的数据库表,然后运行 ./manage.py convert_to_south yourappname
;这会进行一次“假”的迁移,并将其设置为模型的最后状态。接着,按照 schemamigration yourappname --auto
和 migrate
的步骤进行。
在你的情况下,你有两个选择: