167

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

对于应用程序,它将是:

python manage.py dumpdata myapp

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

4

11 回答 11

284

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

./manage.py dumpdata myapp1 myapp2.my_model

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

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
于 2009-07-11T07:19:32.473 回答
111

如前所述,您不能通过 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()
于 2009-07-11T10:51:00.283 回答
11

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

句法:

python manage.py dumpdata app_name.model_name

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

python manage.py dumpdata auth.group_permission

对于输出看看控制台

于 2017-08-07T20:10:25.083 回答
10

特定文件的特定模型:

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

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

python manage.py loaddata specific_file.json
于 2021-02-09T06:11:22.817 回答
6

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

./manage.py dumpdata myapp.my_model
于 2009-07-11T06:59:41.420 回答
5

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

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

如果我只说

./manage.py dumpdata myapp2 myapp2.my_model

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

于 2015-05-20T21:32:13.503 回答
1

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

于 2009-07-11T07:34:27.450 回答
1

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

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

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

于 2012-04-15T21:26:10.973 回答
1

要将其写入特定文件:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
于 2019-11-19T06:19:49.683 回答
1

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

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

于 2020-10-02T09:04:40.643 回答
1

对于像我这样的 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
于 2021-03-10T19:47:11.577 回答