Django转储单个模型的数据?

Django dump data for a single model?

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

对于一个应用程序来说:

1
python manage.py dumpdata myapp

但是,我想要一些特定的模型,例如"myapp.mymodel"被转储。原因是,我在同一个应用程序中有一些巨大的300万条记录加上数据集,我不想丢弃它们。


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

1
./manage.py dumpdata myapp1 myapp2.my_model

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

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


如前所述,您不能通过django 1.0中的manage.py命令来执行此操作。但是,您可以使用脚本导出JSON文件,并使用loaddata加载该文件:

1
2
3
4
5
6
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()


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

语法:

1
python manage.py dumpdata app_name.model_name

例如,从位于Django的默认身份验证应用程序中的组权限模型转储数据。

1
python manage.py dumpdata auth.group_permission

对于输出,请查看控制台。


我认为你的问题有解决办法。您可以这样转储单个模型:

1
./manage.py dumpdata myapp.my_model


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

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

如果我只是说

1
./manage.py dumpdata myapp2 myapp2.my_model

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


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

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

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


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