2014-04-06 55 views
0

我想我的应用“落地”迁移以南我写了下面的命令蟒蛇manage.py迁移着陆错误

python manage.py migrate landing

,但它显示了以下错误

Running migrations for landing:

  • Migrating forwards to 0003_auto__chg_field_userinput_email2. landing:0001_initial

FATAL ERROR - The following SQL query failed: CREATE TABLE landing_userinput ( id integer AUTO_INCREMENT NOT NULL PRIMARY KEY, name varchar(120) NOT NULL, email varchar(200) NOT NULL, city varchar(120) NOT NULL, timestamp datetim e NOT NULL)

The error was: (1050, "Table 'landing_userinput' already exists") ! Error found during real run of migration! Aborting.

! Since you have a database that does not support running ! schema-altering statements in transactions, we have had ! to leave it in an interim state between migrations.

! You might be able to recover with: = DROP TABLE landing_userinput CASCAD E; []

raise errorclass, errorvalue

django.db.utils.OperationalError: (1050, "Table 'landing_userinput' already exists")

请给我点建议以改善这个错误。

+0

它说表格存在以及如何解决它。这样做还是失败? – Leigh

回答

0

请勿同时使用syncdbmigrate;这将与最初的迁移将创建空白表格相冲突。

如果你有一个新的应用程序,并希望将其交由南管理,您的操作顺序是:

  1. ./manage.py schemamigration landing --initial - 此创建初始迁移,这为应用程序创建的表。你只能这样做一次
  2. ./manage.py migrate landing - 这将应用迁移。第一次你做到这一点(从上面的步骤#1),这将在数据库中创建一个空表。

一旦你完成了前两步,每当你做出改变你的模型,您运行这两个命令:

  1. ./manage.py schemamigration landing --auto - 这将创建一个具有更改该文件你的模型(迁移)。

  2. ./manage.py migrate landing - 这将应用新的迁移(这是与上面相同的命令);它会影响到你的数据库的变化。

如果你已经有一个现有的应用程序,安装南部和运行syncdb打造南部自己的数据库表,然后运行./manage.py convert_to_south yourappname;这将执行“假”迁移并将其设置为模型的最后一个状态。然后,按照schemamigration yourappname --automigrate的步骤操作。

你的情况,你有两个选择:

  1. 删除表(如错误提示)。这也将摆脱所有的数据。如果您正在开发中,这是最简单的新手入门(如果您想为模型提供一些默认数据,则还应该使用fixtures)。

  2. 您可以使用--fake选项欺骗南方以认为操作已经完成。有关更多信息,请参阅documentation