Djangoは単一モデルのデータをダンプしますか?


144

アプリ全体ではなく単一のモデルdumpdataDjangoを実行できますか?

アプリの場合:

python manage.py dumpdata myapp

ただし、「myapp.mymodel」などの特定のモデルをダンプしたい。その理由は、同じアプリ内にダンプしたくない、300万のレコードとデータセットがいくつかあるからです。


1
あなたの質問は理解しにくいと思います。SQLダンプをデータベースにロードしますか?または、モデルのインスタンスで何らかのtoString()を実行したいですか?
Leonard Ehrenfried、

回答:


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でも問題なく機能しました。新しいリリースの新機能によって、古い回答が無効になることはありません。
11

1
また、このデータをアプリの別のインスタンスに追加するにはどうすればよいですか。
aguilarpgc

1
人間が読めるjsonを--indent 4後からフラグを使用するにはdumpdata
Valery 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
必要に応じてさらに細かくできるので、これは優れたスクリプトです。代わりに上記の3行目で.filter(...)を実行すると、必要な特定のレコードだけをダンプできます。
Gringo Suave

1
いいね!この方法で間違いなく細かい制御ができます。
Luis Artola

9

djangoモデルからすべてのデータをjson形式に変換します。

構文:

python manage.py dumpdata app_name.model_name

以下のためにのDjangoにデフォルト認証アプリに常駐group_permissionモデルからのデータをダンプ。

python manage.py dumpdata auth.group_permission

出力については、コンソールをご覧ください


6

あなたはあなたの質問に解決策を持っていると思います。次のようにして、個々のモデルをダンプできます。

./manage.py dumpdata myapp.my_model

投稿する前に試しました。運がなかった。私はジャンゴ1.0にいます。myapp.models.mymodelも試しましたか?
nategood 2009

4

成功するために、私はそれを2回言って、次のようにモデルを2回指定する必要がありました。

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

私が言っただけなら

./manage.py dumpdata myapp2 myapp2.my_model

my_modelを指定したにもかかわらず、myapp2のすべてのモデルが殺到しました。


1

回避策として、別のアプリを作成してモデルをコピーし、db_tableメタオプションを使用して既存のテーブルを指すようにすることができます。次に、コピーしたモデルを新しいアプリにダンプします。既存のアプリは影響を受けません。



1

特定のファイルに書き込むには:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.