Django - 迁移命令说该表在执行第二次 makemigrations 后存在

Posted

技术标签:

【中文标题】Django - 迁移命令说该表在执行第二次 makemigrations 后存在【英文标题】:Django - Migrate command says that table exists after second makemigrations was executed 【发布时间】:2015-12-08 16:37:28 【问题描述】:

我有一个带有相关字段设置的模型。我运行manage.py migrate 然后它在我的数据库中创建了一个表。然后我运行manage.py makemigrations,以便它可以创建一个带有前缀“0001”的初始迁移文件。我在模型中添加了另一个字段,然后再次运行manage.py makemigrations,这创建了另一个带有前缀“0002”的迁移文件。当我现在运行manage.py migrate 时,它仍然会查看第一个迁移文件,因此会抛出“表已存在”的错误。如何让它只查看最新的迁移文件,以便将新列添加到表中?我正在使用 mysql

【问题讨论】:

【参考方案1】:

这永远不会发生,除非 django 检测到(认为)数据库尚未设置,并尝试使用模式初始化表。

看起来你的表已经设置好了,但是 django 不知道。这就是它尝试开始应用第一次迁移的原因 - 表创建和架构包含在其中。

您可以根据您的具体问题使用--fake--fake-initial 选项,它们告诉django 表已经设置好并准备就绪,并伪造迁移。

更多信息的有用链接:

django migrations - django documentation

django migrations, a primer - realpython

how to redo a migration after fake - ***

【讨论】:

嗨 kicker86。我决定从头开始,只是为了确认我所经历的。我删除了数据库并创建了一个新数据库;然后我删除了我的应用程序文件夹中迁移文件夹中的所有文件。然后我运行manage.py migrate,它按预期工作,然后我运行manage.py makemigrations。现在它告诉我:No changes detected。我以前遇到过这个问题,所以我通常做的是manage.py makemigrations <app_name>。只在我指定 app_name 时才有效,这不是很奇怪吗? makemigrations 创建迁移,migrate 应用这些迁移。所以当你创建一个空数据库,并删除所有迁移文件时,你应该先运行makemigrations创建迁移文件,然后应用migrate。在没有任何迁移文件的空数据库上运行 migrate 除了设置 django(和其他应用程序,如果使用)基表之外,什么也做不了。如果没有迁移文件,您的模型将不会被转换为表。 查看他的回答,了解为什么需要使用应用名称而不是通用的 make migrations 语句创建迁移:***.com/questions/24912173/…

以上是关于Django - 迁移命令说该表在执行第二次 makemigrations 后存在的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的模型表被删除

如何通过 Django 迁移执行 git 命令?

查询第一次执行慢,但第二次/第三次执行快

django系列教程15:数据库迁移

Rails DB 迁移 - 如何删除表?

如何解决 Heroku 上托管的 django 项目中的迁移问题?