Django转储单个模型的数据?


144

我可以dumpdataDjango中执行中仅对单个模型执行,而不对整个应用程序执行,如果可以,如何执行?

对于一个应用程序,它将是:

python manage.py dumpdata myapp

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


1
我发现您的问题不容易理解。您想将SQL转储加载到数据库中吗?还是要在模型实例上执行某种toString()?
伦纳德·埃伦弗里德

Answers:


245

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

./manage.py dumpdata myapp1 myapp2.my_model

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

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

17
盖茨,不了解将近2年的职位否决票。而且上述代码即使在v1.1下也可以正常工作。新版本中的新功能不会使旧答案无效。
Simplyharsh

1
以及如何在其他应用程序实例中添加此数据?
aguilarpgc

1
为了使人类可读的JSON使用标志--indent 4dumpdata
瓦列里Ramusik

103

如前所述,您无法通过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()

4
这是一个很棒的脚本,因为如果您愿意的话,您甚至可以得到更详尽的描述。如果改为在上面的第三行中执行.filter(...),则可以仅转储所需的特定记录。
Gringo Suave

1
真好!这样绝对可以更好地控制。
Luis Artola

9

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

句法:

python manage.py dumpdata app_name.model_name

对于例如倾倒从group_permission模型,其驻留在缺省auth应用在Django数据。

python manage.py dumpdata auth.group_permission

对于输出,请在console上查看。


6

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

./manage.py dumpdata myapp.my_model

我发布之前尝试过。没有运气。我在Django 1.0中。还尝试过myapp.models.mymodel?
nategood

4

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

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

如果我只说

./manage.py dumpdata myapp2 myapp2.my_model

尽管我指定了my_model,但我仍然充满了myapp2中的所有模型。


1

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



1

要将其写入特定文件:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.