【问题标题】:What is the best way to migrate data in django在 django 中迁移数据的最佳方法是什么
【发布时间】:2010-09-15 14:46:12
【问题描述】:

在我的模型中进行了一些更改(例如,模型中的新字段和新模型)后,将这些更改反映到我的填充数据库的最佳方式是什么?


PS:我想在一个地方看到许多解决方案的评级。显然已经列出了更多解决方案here

【问题讨论】:

    标签: django data-migration


    【解决方案1】:

    Django 现在有自己的内置迁移,记录在:

    https://docs.djangoproject.com/en/dev/topics/migrations/

    【讨论】:

      【解决方案2】:

      Perform these steps in order may help you:

      For more details,

      点击这里:http://south.readthedocs.org/en/latest/

      1) python manage.py schemamigration apps.appname --initial

      以上步骤默认创建迁移文件夹。

      2) python manage.py migrate apps.appname --fake

      生成虚假迁移。

      3)python manage.py schemamigration apps.appname --auto

      然后你可以根据需要添加字段并执行上述命令。

      4) python manage.py migrate apps.appname

      然后将文件迁移到数据库中。

      【讨论】:

        【解决方案3】:

        另一种技术是使用 dumpdata 和 loaddata 参数来管理.py,在中间杀死你的数据库:

        1. python manage.py dumpdata > dump.json
        2. 使用外部工具,删除所有受影响的表,或杀死整个数据库
        3. python manage.py loaddata dump.json

        请参阅manage.py docs 了解更多信息。

        【讨论】:

        • python manage.py sqlreset appname 打印必要的 SQL 语句,但实际上并不运行它们。
        • 不错的解决方案。谢谢。在我们的例子中,在 Django 14 上,我们需要在加载固定装置之前创建一个空数据库。数据库可以由 syncdb 创建,但是,在加载转储之前,必须手动删除自动创建的内容类型。
        • 查看这个答案的日期。有时 Django 自己的迁移系统和 South 一样好或更好。 @Stian Jensen 有正确的答案。
        【解决方案4】:

        我问了一个类似的问题here,得到了很多答案。

        有很多方法可以做到这一点,例如使用 SQL 手动执行转储和重新加载、使用固定装置或使用 Django 的“新兴”模式演变包之一:

        【讨论】:

          【解决方案5】:

          取决于更改的范围。如果它超出了 ALTER,那么您正在做大手术。备份模型和数据库,以便您可以返回。

          我的偏好是将您的新(修订、更正、扩展)模型作为新应用程序放入。它没有 URL 或任何东西,只是一个模型。

          1. 将新模型创建为新应用程序。创建测试,以确保它有效。
          2. syncdb 来构建新模型的临时实现。
          3. 编写一个小的一次性实用程序来查询您的旧模型,并加载您的新模型。您可能想在纯 SQL 中尝试此操作。我更喜欢编写一个简单的查询、构建和保存循环。
          4. 加载新模型后,您可以将其转储到 JSON 文件中。

          从旧模型中提取数据后,您可以以首选的新格式重建数据库。

          1. 将新模型移动到您现有的应用程序中。
          2. 删除旧版本的应用程序表。
          3. syncdb 来构建新表。
          4. 使用数据加载 JSON 文件。

          【讨论】:

            【解决方案6】:

            使用 manage.py sqlall 查看新列的参数是什么,并使用 Alter table 语句手动将它们添加到数据库中。这样您就不必重做数据库;但它需要一些 SQL 知识...

            看看here(向下滚动到“对数据库架构进行更改”)

            【讨论】:

              猜你喜欢
              • 2020-05-08
              • 1970-01-01
              • 1970-01-01
              • 2013-08-10
              • 2021-06-02
              • 2011-03-03
              • 2019-08-20
              • 2021-01-13
              • 2016-10-16
              相关资源
              最近更新 更多