通过 Django 模型迁移覆盖表的风险?

Risk to overwrite tables via Django Models migrations?

我目前正在尝试更新我的 Django 模型以包含一些新功能,但是在 运行nning "makemigrations" 之后,控制台输出让我担心我会覆盖数据库。

基本上,在我的 models.py 中,我有 8 个模型。一个是全新的,一个只是修改过的。我想将这些更改迁移到数据库,所以我 运行 "makemigrations"。创建了一个迁移文件(我注意到没有其他任何文件——大概是最初创建这些文件的同事出于某种原因删除了它们)。控制台输出为:

- Create model ModelNew
- Create model ModelDontTouch
- Create model ModelDontTouch
- Create model ModelDontTouch
- Create model ModelDontTouch
- Create model ModelDontTouch
- Create model ModelDontTouch
- Create model ModelUpdated

为什么说创建模型?是因为据 Django 所知,这是有史以来执行的第一次迁移吗?或者它是否计划覆盖所有其他表(这会完全杀死我们的应用程序并导致非常糟糕的一天)?

我也注意到一些模型已经指定

db_table = 'some_table'
db_tablespace = 'sometable'

其他,只是, db_tablespace = 'sometable'

其他,一无所有。有人对此有什么想法吗?

Django 在进行迁移时不会查询数据库本身;它根据以前的迁移和模型的当前状态构建一个图表。因此,如果没有以前的迁移,Django 将从头开始创建它们。这不会覆盖您的表,但它实际上也不会起作用,因为它会尝试创建它们但数据库会拒绝。

一种选择是暂时恢复您的更改并再次 运行 进行迁移以回到正确的起点,然后 运行 使用 --fake-initial 将迁移标记为已应用无需实际执行,然后重新应用您的更改并再次 运行 makemigrations。