如何使用模型创建新的 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
和运行宁migrate
或runmigration
有关(或者是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 中的迁移历史更改丢失。
但没有必要擦除整个数据库并从头开始。
所以我有这个 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
和运行宁migrate
或runmigration
有关(或者是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 中的迁移历史更改丢失。 但没有必要擦除整个数据库并从头开始。