【问题标题】:Django dump data for a single model?单个模型的 Django 转储数据?
【发布时间】:2010-11-09 22:19:57
【问题描述】:

我可以在单个模型而不是整个应用程序上执行Django 中的dumpdata,如果可以,如何?

对于一个应用程序来说:

python manage.py dumpdata myapp

但是,我希望转储一些特定模型,例如“myapp.mymodel”。原因是,我在同一个应用程序中有一些庞大的 300 万条记录和数据集,我不想丢弃它们。

【问题讨论】:

  • 我觉得你的问题不太好理解。您想将 SQL 转储加载到数据库中吗?或者您想对模型的实例执行某种 toString() 操作?

标签: django django-models loaddata dumpdata


【解决方案1】:

从 1.1 及更高版本开始,Django dumpdata 管理命令允许您从单个表中转储数据:

./manage.py dumpdata myapp1 myapp2.my_model

您还可以在命令行上分离多个应用程序和模型。这是规范的定义:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]

【讨论】:

  • gath,不理解对将近 2 岁的帖子的反对票。此外,即使使用 v1.1 ,上面的代码也能正常工作。新版本中的新功能不会使旧答案无效。
  • 我如何在应用程序的另一个实例中添加这些数据?。
  • 为了使人类可读的 json 在dumpdata之后使用标志--indent 4
【解决方案2】:

如前所述,您无法在 Django 1.0 中通过 manage.py 命令执行此操作。但是,您可以使用脚本导出 JSON 文件,并使用 loaddata 加载它:

from django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()

【讨论】:

  • 这是一个很棒的脚本,因为您可以根据需要获得更精细的脚本。如果您改为在上面的第三行执行 .filter(...),您可以只转储您想要的特定记录。
【解决方案3】:

从 django 模型中将所有数据转换成 json 格式。

语法:

python manage.py dumpdata app_name.model_name

对于示例,从驻留在 django 的默认身份验证应用程序中的 group_permission 模型转储数据。

python manage.py dumpdata auth.group_permission

查看控制台的输出。

【讨论】:

    【解决方案4】:

    特定文件的特定模型:

    python manage.py dumpdata app_label.ModelName > specific_file.json
    

    并将其加载到另一个应用程序:首先将文件移动或复制到您要处理它的应用程序,然后:

    python manage.py loaddata specific_file.json
    

    【讨论】:

      【解决方案5】:

      我认为您的问题有解决方案。您可以像这样转储单个模型:

      ./manage.py dumpdata myapp.my_model
      

      【讨论】:

      • 我在发帖前试过了。没有运气。我在 django 1.0.也试过 myapp.models.mymodel?
      【解决方案6】:

      为了成功,我不得不说两次,并指定两次模型,例如:

      ./manage.py dumpdata myapp2.my_model myapp2.my_model
      

      如果我只是说

      ./manage.py dumpdata myapp2 myapp2.my_model
      

      尽管我指定了 my_model,但我还是被 myapp2 中的所有模型淹没了。

      【讨论】:

        【解决方案7】:

        作为一种解决方法,您可以制作另一个应用程序并复制模型,但使用 db_table 元选项将其指向现有表。然后,您可以将复制的模型转储到新应用程序中。您现有的应用程序不会受到影响。

        【讨论】:

          【解决方案8】:

          我创建了一个管理命令,用于在每个模型的基础上生成一个夹具。 可以通过运行来生成fixture:

          ./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json
          

          代码:https://gist.github.com/2394883

          【讨论】:

            【解决方案9】:

            将其写入特定文件:

            python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
            

            【讨论】:

              【解决方案10】:

              如果您只想转储模型的指定对象,可以为 dumpdata 命令使用--pks 可选参数。

              --pks PRIMARY_KEYS 仅输出由逗号分隔的主键列表指定的对象。这仅在倾倒时可用 一个模型。默认输出模型的所有记录。

              【讨论】:

                【解决方案11】:

                对于像我这样的 Django 和 Python 新手,这可能很有用:

                如果您只想转储一行(显然是一个表),并且您有例如应用程序“merchant”并且模型也被命名为“Merchant”,并且您通常使用完全限定的像这样的名字:merchant.models.Merchant; 甚至不要尝试使用此名称。语法如下:

                # only dumps the merchant with id = 123, pretty printed
                python manage.py dumpdata merchant.Merchant --pks 123 --indent 2
                

                【讨论】:

                  猜你喜欢
                  • 2023-04-04
                  • 1970-01-01
                  • 2013-04-15
                  • 2011-10-25
                  • 1970-01-01
                  • 2016-04-21
                  • 2022-01-11
                  • 2014-11-22
                  • 2011-12-07
                  相关资源
                  最近更新 更多