从 db 获取当前的 db 迁移状态,而不是 django 中的模型

Posted

技术标签:

【中文标题】从 db 获取当前的 db 迁移状态,而不是 django 中的模型【英文标题】:Get current db migration status from db, not models in django 【发布时间】:2018-04-22 08:42:30 【问题描述】:

我需要的是获取描述 db 中当前结构的迁移,而不是我在模型文件中定义的内容,因为我的模型未与 db 的结构对齐,所以我想获取当前状态然后应用我在我的模型中定义的修改并使它们对齐。 可能吗?怎么做?

【问题讨论】:

my models are not aligned to the structure of db 是什么意思? 在我的模型中,表的结构可能与实际数据库不同,我想从当前状态将状态带到我的数据库中 ***.com/questions/1179469/… 的可能重复项 说模型,我说迁移 您的意思是您正在尝试创建一个 django 应用程序以使用不是使用 django 迁移创建的现有数据库?这意味着您想要生成一个迁移,以创建处于当前状态的数据库? 【参考方案1】:

Django-admin 有一个从数据库创建模型的命令:inspectdb。你可以找到documentation here。

我们的想法是:

首先使用inspectdb生成初始模型, 查看结果并根据需要更改字段类型,如果您知道得更好, 然后运行makemigrations 以获取您当前数据库的迁移和 然后开始修改您的模型(修改为您当前在应用中的模型)并 再次运行makemigrations

这是一个相当复杂的操作,推荐的方法是拥有两个数据库并将数据从第一个移动到新的。 Django 将向您的数据库添加大量表,您可能不希望在您的旧数据库上使用这些表。这在this blog post中有很好的描述

【讨论】:

这是一种可能的方式,但是inspectdb需要手动检查,因为不是100%可靠,所以不能用于自动化过程 不幸的是,您总是需要手动工作,以便将遗留数据库集成到 django 应用程序中。我认为这不能可靠地自动化。而且由于它是一次性的,我不明白为什么这是一个问题

以上是关于从 db 获取当前的 db 迁移状态,而不是 django 中的模型的主要内容,如果未能解决你的问题,请参考以下文章

将本地 mongo db 迁移到 atlas 后无法从 atlas 获取记录

rake db:schema:dump 是不是从迁移或数据库本身重新创建 schema.rb?

如何在Mongo DB中使用arrayElemAt获取当前文档值

使用元类设置时 Django 迁移忽略 db_table

使用Ruby从MySQL迁移到DB2

从 Sqlite 迁移到 CoreData