python manage.py dumpdata > data.json
python manage.py loaddata data.json
dumpdataで出力したデータをloaddataで読み込むことができる。
データベースの入れ替えなどに使える。
データが多いと失敗する問題
loaddataはデータをすべてメモリに展開してからデータベースに書き込むため、データが多いと失敗する。
データ(jsonファイル)を分割して複数回実行することで対処できる。
解決策 分割してloaddata
import os
import json
with open('data.json', 'r') as fp:
datas = json.load(fp)
chunk_size = 100
chunk_datas_list = [
datas[index:index + chunk_size]
for index in range(0, len(datas), chunk_size)
]
for chunk_datas in chunk_datas_list:
tempfile = 'temp.json'
with open(tempfile, 'w') as fp:
json.dump(chunk_datas, fp)
os.system(f'python manage.py loaddata {tempfile}')