【问题标题】:Cannot get Django 1.7 Migrations to detect proper changes to my DB.无法让 Django 1.7 迁移来检测对我的数据库的正确更改。
【发布时间】:2015-03-19 14:52:58
【问题描述】:

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

【问题讨论】:

    标签: django django-models django-migrations


    【解决方案1】:

    您所做的是在运行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 不是必需的。

    【讨论】:

    • 感谢您的回复。我只为应用程序的第一个数据库创建做了syncdb。现在我无法重新开始,因为我的行中已经有大量数据,我该怎么办?我已经尝试按照您的建议进行 makemigrations myapp 和 migrate myapp ,但是这两个命令目前都没有创建我需要的新表。您是否建议我在尝试更新我的 models.py 文件并开始迁移过程之前对我的数据库做一些整理工作?
    • 如果我是你,我会先备份我当前的数据库(dumpdata),然后创建一个新数据库,运行makemigrationsmigrate,然后将dumpdata导入新数据库。 @SwAvGuy。创建新数据库不一定意味着删除数据库,只需创建一个不同名称的新数据库,并测试它是否适合您,然后做您认为最适合的事情。 :)
    • 我会尝试并更新如果它有效。感谢您的建议。但只是好奇,我正确理解你的方式是问题的出现是因为 Django 没有为我的第一个数据库配置创建初始迁移模式,因为我使用了 syncdb?这可能是错误的来源吗?
    【解决方案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

    【讨论】:

    • 您好,感谢您的意见!从那以后,我已经很好地解决了我的生产构建问题,但这是一篇非常有用的帖子,与我有类似问题的人在寻找答案。
    【解决方案3】:

    我也是架构迁移的新手,但我将解释它对我的工作原理:

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

    【讨论】:

    • 感谢您的回复。因此,如果我对您的理解正确,您是说在我使用新的 models.py 文件更新模型和数据库的更改之前,我需要先 makemigrations --myapp --initial 在我这样做之前还要别的吗?在我这样做之后,我才应该切换models.py文件并尝试更改数据库结构?
    • 首先备份文件/数据库
    • 然后 ./manage.py makemigrations myapp --initial 然后 ./manage.py migrate myapp 然后进行更改 然后 ./manage.py makemigrations myapp --auto 并应用 ./manage.py migrate myapp
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2014-12-13
    • 2013-08-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多