【Django】loaddataが失敗するときの対処法

この記事は約2分で読めます。
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}')
タイトルとURLをコピーしました