【问题标题】:python manage.py migrate landing errorpython manage.py migrate 登陆错误
【发布时间】:2014-05-18 10:15:56
【问题描述】:
我想用南迁移我的应用程序“登陆”我写了以下命令
python manage.py migrate 登陆
但它显示以下错误
为登陆运行迁移:
- 正向迁移到 0003_auto__chg_field_userinput_email2。
登陆:0001_initial
致命错误 - 以下 SQL 查询失败:CREATE TABLE landing_userinput (
id 整数 AUTO_INCREMENT 非空主键,name varchar(120) 非空,
email varchar(200) 非空,city varchar(120) 非空,timestamp datetim
e 非空)
错误是:(1050,“表'landing_userinput'已经存在”)
!在实际运行迁移过程中发现错误!中止。
!由于您有一个不支持运行的数据库
!事务中的模式改变语句,我们有
!使其在迁移之间处于临时状态。
!您可能能够通过以下方式恢复:= DROP TABLE landing_userinput CASCAD
E; []
引发错误类,错误值
django.db.utils.OperationalError: (1050, "表 'landing_userinput' 已经存在")
请给我建议以改进此错误。
【问题讨论】:
标签:
python
mysql
sql-server
django
django-south
【解决方案1】:
不要同时使用syncdb和migrate;这会发生冲突,因为初始迁移会创建一个空白表。
如果您有一个新应用并希望由南管理,您的操作顺序是:
-
./manage.py schemamigration landing --initial -- 这将创建初始迁移,从而为应用程序创建表。您只能这样做一次。
-
./manage.py migrate landing -- 这将应用迁移。第一次执行此操作时(使用上面的第 1 步),这将在数据库中创建一个空表。
完成前两个步骤后,无论何时对模型进行更改,都需要运行以下两个命令:
./manage.py schemamigration landing --auto -- 这将创建包含模型更改(迁移)的文件。
./manage.py migrate landing -- 这将应用新的迁移(这与上面的命令相同);它会影响对数据库的更改。
如果您已经有一个现有的应用程序,安装 south 并运行 syncdb 创建 south 自己的数据库表,然后运行 ./manage.py convert_to_south yourappname;这将进行“假”迁移并将其设置为模型的最后状态。然后,按照schemamigration yourappname --auto 和migrate 的步骤操作。
在你的情况下,你有两个选择:
删除表(如错误所示)。这也将删除所有数据。如果您正在开发中,这是重新开始的最简单方法(如果您想为模型提供一些默认数据,也应该使用 fixtures)。
您可以使用--fake 选项来欺骗South 以为操作已经完成。请参阅documentation 了解更多信息。