gpt4 book ai didi

python - Django 1.5 : How do I add a new model field to an existing table using South without having to drop a table?

转载 作者:行者123 更新时间:2023-11-29 12:37:47 24 4
gpt4 key购买 nike

我正在 Heroku 上实时运行 Django 5.1 Web 应用程序,其中包含我想保留的用户数据。

在本地,我只是向现有模型添加了一个新的 char 字段,并且不想在推送到 Heroku 时破坏任何东西。我知道 Django 6 引入了一个 migrate 命令,但 Django 5 没有类似的东西。我只有 South 迁移工具。

我试图跟随 South basic tutorial在本地(在我的 sqlite3 数据库上),以确保当我在 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。谢谢!

最佳答案

您使用 Django South 进行数据库迁移是正确的。您上面运行的问题是您已经在数据库中创建了表。 South 允许您在第一次运行迁移时执行“假”迁移,因此它不会尝试创建已经存在的表。

您可以尝试使用 South 命令将现有应用程序转换为 South,如此处所述 http://south.readthedocs.org/en/latest/convertinganapp.html#converting-an-app ,或尝试以下操作:

  1. 在您的数据库中创建所有表。你在第一次开始你的项目时运行了这个

    python manage.py syncdb
  2. 使用 South 创建初始迁移

    python manage.py schemamigration --initial forecasts
  3. 将其作为假迁移应用

     python manage.py migrate forecasts --fake
  4. 更改预测模型。

  5. 为您的新更改创建迁移

     python manage.py schemamigration --auto forecasts
  6. 应用迁移,现在只有一个 alter 命令

     python manage.py migrate forecasts

关于python - Django 1.5 : How do I add a new model field to an existing table using South without having to drop a table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com