我正在Heroku上运行Django 5.1 Web应用程序,并保留用户数据。Django 1.5:如何使用South向现有表添加新模型字段而不必删除表?
在本地,我只是给现有模型添加了一个新的char
字段,并且当我推送到Heroku时不想破坏任何内容。我知道Django 6引入了一个migrate
命令,但是Django 5没有这样的东西。我只有South
迁移工具。
我试图在本地(在我的sqlite3数据库上)关注South basic tutorial,以确保在Heroku上运行'真正'时不会破坏任何内容。一切都打破了......
(venv)$ python manage.py migrate forecasts
Running migrations for forecasts:
- Migrating forwards to 0002_auto__add_field_day_weather.
> forecasts:0001_initial
FATAL ERROR - The following SQL query failed: CREATE TABLE "forecasts_region" ("id" integer NOT NULL PRIMARY KEY, "url" varchar(200) NOT NULL UNIQUE, "name" varchar(200) NOT NULL, "nickname" varchar(10) NOT NULL)
The error was: table "forecasts_region" 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 "forecasts_region"; []
= DROP TABLE "forecasts_day"; []
= DROP TABLE "forecasts_tide"; []
! The South developers regret this has happened, and would
! like to gently persuade you to consider a slightly
! easier-to-deal-with DBMS (one that supports DDL transactions)
! NOTE: The error which caused the migration to fail is further up.
Error in migration: forecasts:0001_initial
DatabaseError: table "forecasts_region" already exists
我被迫DROP
这三个表,然后重新运行python manage.py syncdb
,然后python manage.py migrate forecasts
。这增加了新的字段,但我在这三个表中丢失了所有的数据。
我是害怕在现场版本上弄乱了事情,所以请问,我该怎么做,按什么顺序?如果您可以包含最佳做法,为了防止出现问题而保留数据,我们将不胜感激。另外,请握住我的手,因为我从未使用过South
。谢谢!
是的,我忽略了运行'./manage.py convert_to_south myapp'。考虑到提供的错误信息,您认为这是问题吗?这似乎与我使用sqlite3数据库的事实有关。此外,有关如何备份我的数据,以防万一出现问题的任何提示? – sgarza62