2014-04-06 123 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