如何使用模型创建新的 table

How to create a new table using model

所以我有这个 django 安装,其中有一堆迁移脚本。他们看起来像这样:

00001_initial.py
00002_blah_blah.py
00003_bleh_bleh.py

现在我知道这些是 "database building" 脚本,它们将 models.py 和 运行 中定义的内容与数据库 "create" tables 和东西。

我想创建一个新的 table(所以我在 models.py 中创建了它的定义)。为此,我复制了另一个模型 class 并编辑了它的名称和字段,一切正常。让我们称这个新模型为 class 'boom'.

我现在的问题是如何使用迁移脚本和 boom 模型 "create" 这个 boom table?

我担心我可能会不小心破坏数据库中已有的任何内容。我如何 运行 迁移以仅创建 boom table?如何专门为其创建迁移脚本?

我知道它与manage.py和运行宁migraterunmigration有关(或者是sqlmigrate?...我很困惑)。在创建 boom table 时,我不想让数据库 boom 如果你明白我的意思的话:)

My question is now how do I "create" this boom table using the migration script and the boom model?

 ./manage.py makemigrations

I am worried that I might accidentally disrupt anything that is already in DB.

迁移的全部意义在于它不会

I know that it has something to do with manage.py and running migrate or runmigration

更多信息请参考:https://docs.djangoproject.com/en/1.10/topics/migrations/

请放心,您的数据库不会崩溃! :-)

首先,创建数据库的备份。将其复制到您的开发机器。尝试一下。这样一来,它是否因为某种原因 "boom" 就没关系了。

首先要做的是

python manage.py showmigrations

这显示了所有现有的迁移,它应该表明它们已经应用了[X]

然后,

python manage.py makemigrations

为您的新模型(名称 00004_...)创建一个新的迁移文件。

然后做

python manage.py migrate

应用它。要撤消它,请返回迁移状态 00003,其中

python manage.py migrate <yourappname> 00003

在 Django 中迁移有两个步骤。

./manage.py makemigrations

将创建您看到的迁移文件 - 这些描述了应该对数据库进行的更改。

您还需要运行

./manage.py migrate 

这将应用迁移,实际上 运行 SQL 中的 alter table 命令更改实际的数据库结构。

通常添加字段或 tables 不会影响数据库中的任何其他内容。更改或删除现有字段时要更加小心,因为这会影响您的数据。

分两个步骤的原因是您可以在开发机器上进行更改,一旦满意就提交迁移文件并发布到您的生产环境。然后你 运行 生产机器上的 migrate 命令将生产数据库带到与你的开发机器相同的状态(假设你的数据库开始相同,则不需要在生产上进行 makemigrations)。

我简单的解决了,把新模型的名字改成原来的名字,然后我查看数据库里有没有这个table,如果没有,我就新建一个[=14] =] 使用旧名称,只有一个字段,如 id。 然后清除迁移并创建新的迁移,迁移并验证 table 已在数据库中修复并且包含所有缺失的字段。 如果仍然不起作用,则将型号名称改回新名称。 但是当 django 询问您是否要重命名模型时,您应该说“不”以正确删除旧模型并创建一个新模型。

这种错误通常发生在您手动删除一些table dB 中,然后table 中的迁移历史更改丢失。 但没有必要擦除整个数据库并从头开始。