【问题标题】:How to create a new table using model如何使用模型创建新表
【发布时间】:2017-05-24 20:54:25
【问题描述】:

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

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

现在我知道这些是“数据库构建”脚本,它将获取models.py 中定义的内容并针对数据库运行它们以“创建”表和内容。

我想创建一个新表(所以我在 models.py 中创建了它的定义)。为此,我复制了另一个模型类并编辑了它的名称和字段,一切都很好。让我们将这个新模型类称为“boom”。

我现在的问题是如何使用迁移脚本和景气模型“创建”这个景气表?

我担心我可能会意外破坏数据库中已经存在的任何内容。如何运行迁移以仅创建繁荣表?如何专门为其创建迁移脚本?

我知道它与manage.py 和运行migraterunmigration (或者是sqlmigrate?...我很困惑)有关。在创建繁荣表时,我不希望数据库运行 繁荣,如果你明白我的意思 :)

【问题讨论】:

  • 这与 ruby​​-on-rails 和 mongo/mysql 有什么关系?你真的应该学习 django 教程来了解 django 的迁移是如何工作的
  • 它们是由 SO 建议的。我不想不尊重系统...

标签: python django django-migrations


【解决方案1】:

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

这种类型的错误通常发生在你手动删除一些以dB为单位的表时,然后表中的迁移历史更改丢失。 但没必要抹掉整个数据库,从头开始。

【讨论】:

    【解决方案2】:

    首先,创建数据库的备份。将其复制到您的开发机器。尝试一下。这样,它是否因某种原因“繁荣”并不重要。

    首先要做的是

    python manage.py showmigrations
    

    这显示了所有现有的迁移,并且它应该显示它们已通过[X] 应用。

    那么,

    python manage.py makemigrations
    

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

    那就做吧

    python manage.py migrate
    

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

    python manage.py migrate <yourappname> 00003
    

    【讨论】:

    • --list 选项是一个非常方便的工具!感谢您的耐心解释。
    • 一个相当愚蠢的问题,如果可以的话....我如何找到 ?它在一些设置/配置文件中吗?
    • 通常是models.py所在目录的名称。应该在settings.py的INSTALLED_APPS设置中列出。 Migrate --list 还按应用名称对迁移进行分组。
    • 我不确定我是否做错了什么...运行 migrate --list 时出现以下错误:“manage.py migrate: error: unrecognized arguments: --list”跨度>
    • yes --help 显示了很长的帮助手册。 Django 版本是 1.10.4..我现在正在阅读帮助手册..
    【解决方案3】:

    在 Django 中迁移有两个步骤。

    ./manage.py makemigrations
    

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

    你还需要运行

    ./manage.py migrate 
    

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

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

    两个步骤的原因是您可以在开发机器上进行更改,并且一旦满意地提交迁移文件并发布到您的生产环境。然后,您在生产机器上运行 migrate 命令,使生产数据库与您的开发机器处于相同状态(假设您的数据库启动相同,则无需在生产中进行迁移)。

    【讨论】:

    • 谢谢先生。你太棒了。这正是我想要的——精确且解释清楚。我希望我能不止一次 +1 你!
    • 我必须等待,所以说:)
    【解决方案4】:

    我现在的问题是如何使用 迁移脚本和繁荣模型?

     ./manage.py makemigrations
    

    我担心我可能会不小心破坏任何 已经在数据库中了。

    迁移的全部意义在于它没有

    我知道这与 manage.py 和运行迁移有关 或运行迁移

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

    请放心,您的数据库不会繁荣! :-)

    【讨论】:

    • 感谢您的回答。我做了 RTFM,但遗憾的是它不是灵丹妙药 :) 我们中的一些人没有像其他人那样理解它,你知道吗?否则我的奶奶会是一个阅读它们的编码器......
    • 对不起,更改了我答案的最后一部分。希望我们仍然可以从您的祖母中培养出出色的编码器:-)
    • 感谢您的回复和链接...我会再读一遍。这次我会根据你们在这里给我的答案更好地理解!
    • 一切顺利。
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2012-11-09
    • 2014-04-08
    • 2011-09-30
    • 2013-09-27
    • 1970-01-01
    • 2015-06-22
    • 2017-11-23
    相关资源
    最近更新 更多