无法让Django 1.7 Migrations检测到我的数据库的正确更改。

时间:2015-01-21 06:54:00

标签: django django-models django-migrations

我有一个生产网络项目,在MySQL数据库中运行了大量数据。我正在尝试通过对名为" enterlink的应用程序的一些更改来更新数据库。"我在现有模型中创造了新元素并完全创建了新模型。在此迁移之前,我从未触及数据库的模式,因为最初运行syncdb来创建它。当我运行:" python manage.py makemigrations enterlink"出现以下输出(pic)。我的问题是,为什么会发生这种情况?数据库已经包含了它在图片中列出的所有模型,那么为什么要注册这些模型列表呢?当我通过执行" python manage.py migrate"来完成迁移时或" python manage.py migrate --fake enterlink" (pic再次),我得到一个输出,但我的数据库模式仍然与旧数据库相同,任何新代码都会产生错误。谁能告诉我这可能是什么问题?我真的很感激任何建议。由于我不确定自己错过了什么,所以非常令人沮丧。

What the output looks like when I makemigrations my enterlink app

3 个答案:

答案 0 :(得分:4)

您所做的就是在运行python manage.py syncdbpython manage.py makemigrations myapp之前运行了python manage.py migrate myapp命令。这就是syncdb创建数据库模式并且迁移伪造的原因,因为模式已经存在。我建议使用python manage.py makemigrations myapppython manage.py migrate myapp,而不要在Django 1.7中使用syncdb弃用。

如果您更改模型中的任何内容,只需运行makemigrationsmigrate命令即可​​。不需要Syncdb。

答案 1 :(得分:2)

这个问题和相关的答案让我很感兴趣。因此,我想分享我在维护实时数据库和迁移方面的经验。

在django1.5.5中测试

初始化数据库:

  1. def choice(): userChoice = str(raw_input("Enter your choice. E or D: ") if userChoice == "e" or "d": return userChoice else: print("Invalid Choice. Please try again.") choice()
  2. ./manage.py syncdb --noinput
  3. ./manage.py migrate
  4. 现在我已经创建了数据库。

    为应用进行迁移:

    1. ./manage.py syncdb
    2. ./manage.py schemamigration myapp --initial
    3. 现在对您的模型进行必要的更改
    4. ./manage.py migrate myapp --fake
    5. ./manage.py schemamigration myapp --auto

答案 2 :(得分:1)

我也是schemamigration的新手,但我会解释它对我有用:

首先您创建应用然后     ./manage.py sycndb,因此可以创建表     ./manage.py makemigrations myapp --initial 所以现在创建了初始迁移,您应该应用它们     ./manage.py迁移myapp 现在您可以更改模型:添加,更改字段,您想要的任何内容然后     ./manage.py makemigrations myapp --auto 这将创建更改的迁移,现在您需要应用它们     enter code here ./ manage.py迁移myapp 所以这实际上会在db

中创建新表