使用しているデータベースに関係なく、djangoにダンプを作成し、後でロードできるようにしたい。コマンド「dumpdata」はこれに最適ですが、コンソールに出力を出力しています。さらに、call_command関数を使用して呼び出しているため、コンソールに出力を出力しているため、その内容を変数に格納できません。
dumpdataまたはその他のコマンドやAPIを使用してダンプをファイルに保存する方法を教えてください。
ありがとう
使用しているデータベースに関係なく、djangoにダンプを作成し、後でロードできるようにしたい。コマンド「dumpdata」はこれに最適ですが、コンソールに出力を出力しています。さらに、call_command関数を使用して呼び出しているため、コンソールに出力を出力しているため、その内容を変数に格納できません。
dumpdataまたはその他のコマンドやAPIを使用してダンプをファイルに保存する方法を教えてください。
ありがとう
あなたはそれをそのように使うだけです:
./manage.py dumpdata > data_dump.json
そのアクションの後、data_dump.json
そのコマンドを実行したディレクトリにファイルがあります。
それに付随する複数のオプションがありますが、おそらくあなたはすでにそれを知っています。知っておく必要があるのは、出力を標準出力からファイルにリダイレクトする>
方法です。ファイル名の前に置くことでそのアクションを実行します。
使用するファイルに何かを追加するには>>
、Djangoからデータをダンプしていて、出力はJSONである可能性が高いため、これは望ましくありません(JSONが無効になるため)。
たとえば、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.json
dumpdataコマンドの最後にコマンドラインからこれを呼び出そうとすると、エラーが発生しますmanage.py: error: no such option: --stdout
。
つまり、コマンドラインではなく、Pythonスクリプト内で呼び出す必要があります。コマンドラインオプションとして使用する場合は、(他の人が提案しているように)リダイレクトが最善の策です。
ドキュメントで言及されているように、大きなデータセットをダンプするために、問題を引き起こすセクションを回避し、それらを別々に扱うことができます。
次のコマンドは通常は機能します。
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
以下のコードを使用して、すべてのデータベースモデルデータをダンプできます
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
これにより、プロジェクトフォルダのルートにファイル()が作成されます。