Django dump data for a single model?
我可以只在一个模型上而不是整个应用程序上在Django执行
对于一个应用程序来说:
1 | python manage.py dumpdata myapp |
但是,我想要一些特定的模型,例如"myapp.mymodel"被转储。原因是,我在同一个应用程序中有一些巨大的300万条记录加上数据集,我不想丢弃它们。
从1.1版及更高版本开始,django
1 | ./manage.py dumpdata myapp1 myapp2.my_model |
号
您还可以在命令行上分离多个应用程序和模型。规范定义如下:
1 | django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]] |
如前所述,您不能通过django 1.0中的manage.py命令来执行此操作。但是,您可以使用脚本导出JSON文件,并使用
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选项将其指向现有的表。然后你可以将复制的模型转储到新的应用程序中。您现有的应用程序不会受到影响。