Django转储单个模型的数据?

时间:2009-07-11 06:34:59

标签: django django-models loaddata dumpdata

我可以在Django只在一个型号上执行dumpdata,而不是整个应用,如果是,怎么做?

对于应用程序,它将是:

python manage.py dumpdata myapp

但是,我想要一些特定的模型,比如要转储“myapp.mymodel”。原因是,我有一些巨大的,300万条记录,同一个应用程序中的数据集,我不喜欢抛弃。

11 个答案:

答案 0 :(得分:211)

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

./manage.py dumpdata myapp1 myapp2.my_model

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

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

答案 1 :(得分:94)

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

答案 2 :(得分:6)

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

./manage.py dumpdata myapp.my_model

答案 3 :(得分:6)

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

<强>语法:

python manage.py dumpdata app_name.model_name

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

python manage.py dumpdata auth.group_permission

对于输出,请查看控制台

答案 4 :(得分:5)

特定文件的特定模型:

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

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

python manage.py loaddata specific_file.json

答案 5 :(得分:4)

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

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

如果我只说

./manage.py dumpdata myapp2 myapp2.my_model

尽管我指定了my_model,但我被myapp2中的所有模型充斥着。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

要将其写入特定文件:

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

对于像我这样的 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