无法获取 Django 1.7 迁移来检测对我的数据库的正确更改。

Cannot get Django 1.7 Migrations to detect proper changes to my DB.

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

我也是 schemamigration 的新手,但我会解释它是如何为我工作的:

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

中创建新表

你所做的是在运行宁python manage.py makemigrations myapppython manage.py migrate myapp之前运行命令python manage.py syncdb。这就是为什么 syncdb 创建了数据库架构并且迁移是伪造的,因为架构已经存在。我会建议使用 python manage.py makemigrations myapppython manage.py migrate myapp 而不要使用 syncdb 因为它在 Django 1.7 中被弃用了。

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

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

在 django1.5.5 中测试

正在初始化数据库:

  1. ./manage.py syncdb --noinput
  2. ./manage.py migrate
  3. ./manage.py syncdb

现在我已经创建了数据库。

正在为应用迁移:

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