1

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

当我迁移我的 enterlink 应用程序时输出的样子

4

3 回答 3

4

您所做的是在运行andpython manage.py syncdb 之前运行了命令。这就是为什么创建数据库模式并且迁移被伪造的原因,因为模式已经存在。我会建议在 Django 1.7 中使用和不使用它。python manage.py makemigrations myapppython manage.py migrate myappsyncdbpython manage.py makemigrations myapppython manage.py migrate myappsyncdb

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

于 2015-01-21T08:01:59.590 回答
2

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

在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
于 2015-06-06T21:19:48.187 回答
1

我也是架构迁移的新手,但我将解释它如何为我工作:

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

于 2015-01-21T07:52:47.247 回答