24

使用しているデータベースに関係なく、djangoにダンプを作成し、後でロードできるようにしたい。コマンド「dumpdata」はこれに最適ですが、コンソールに出力を出力しています。さらに、call_command関数を使用して呼び出しているため、コンソールに出力を出力しているため、その内容を変数に格納できません。

dumpdataまたはその他のコマンドやAPIを使用してダンプをファイルに保存する方法を教えてください。

ありがとう

4

5 に答える 5

38

あなたはそれをそのように使うだけです:

./manage.py dumpdata > data_dump.json

そのアクションの後、data_dump.jsonそのコマンドを実行したディレクトリにファイルがあります。

それに付随する複数のオプションがありますが、おそらくあなたはすでにそれを知っています。知っておく必要があるのは、出力を標準出力からファイルにリダイレクトする>方法です。ファイル名の前に置くことでそのアクションを実行します。

使用するファイルに何かを追加するには>>、Djangoからデータをダンプしていて、出力はJSONである可能性が高いため、これは望ましくありません(JSONが無効になるため)。

于 2012-07-18T16:39:44.937 に答える
29

たとえば、Python内から呼び出す場合は、dumpdataの出力を入れるファイルを選択できます。call_command

from django.core.management import call_command

output = open(output_filename,'w') # Point stdout at a file for dumping data to.
call_command('dumpdata','model_name',format='json',indent=3,stdout=output)
output.close()

ただし、たとえば--stdout=filename.jsondumpdataコマンドの最後にコマンドラインからこれを呼び出そうとすると、エラーが発生しますmanage.py: error: no such option: --stdout

つまり、コマンドラインではなく、Pythonスクリプト内で呼び出す必要があります。コマンドラインオプションとして使用する場合は、(他の人が提案しているように)リダイレクトが最善の策です。

于 2012-07-18T17:20:06.403 に答える
9

ドキュメントで言及されているように、大きなデータセットをダンプするために、問題を引き起こすセクションを回避し、それらを別々に扱うことができます。

次のコマンドは通常は機能します。

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

python manage.py loaddata db.json

後で除外されたデータをエクスポートできる場合:

python manage.py dumpdata auth.permission > auth.json

python manage.py loaddata auth.json
于 2016-09-13T22:12:02.410 に答える
4

django-admin.py dumpdata

指定されたアプリケーションに関連付けられたデータベース内のすべてのデータを標準出力に出力します。

ご存知のように、標準出力をファイルにリダイレクトできます。

command > file.data
于 2012-07-18T16:39:37.583 に答える
0

以下のコードを使用して、すべてのデータベースモデルデータをダンプできます

from django.core.management import call_command


with open("data.json", "w", encoding="utf-8") as fp:
    call_command("dumpdata", format="json", indent=2, stdout=fp)

data.jsonこれにより、プロジェクトフォルダのルートにファイル()が作成されます。

于 2021-07-25T23:35:55.990 に答える