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 后存在的主要内容,如果未能解决你的问题,请参考以下文章