如何加载一个太大而无法装入内存的Django fixture ?



我希望使用这里描述的fixture加载初始数据

https://docs.djangoproject.com/en/dev/howto/initial-data/

对于一个小数据集来说,这很容易。然而,我希望加载一个大的CSV将不适合内存。如何将其序列化为大型JSON格式?我是否必须通过手动编写打开'['和关闭']'来破解它,或者有一个清洁器这样做吗?

我知道这是相当古老的,但我刚刚有同样的问题。

使用这篇文章作为参考:

使用jq如何将一个非常大的JSON文件分割成多个文件,每个文件都有特定数量的对象?

我将原始的json对象大数组拆分为单个对象,每个文件一个,如下所示:

 jq -c '.[]' fixtures/counts_20210517.json | 
 awk '{print > "fixtures/counts_split/doc00" NR ".json";}'      

,然后循环遍历文件,在开始和结束处添加方括号,并在该文件

上调用manage.py loaddata
for file in fixtures/counts_split/*json; do
    echo "loading ${file}" 
    sed -i '1s/^/[/' $file
    sed -i '1s/$/]/' $file
    manage.py loaddata $file
done

看到您从一个CSV文件开始,您可以创建一个自定义命令。您可以在命令中读取CSV文件,创建对象并将其保存到数据库中。只要可以在循环中处理CSV的每一行,就不会遇到内存问题。

相关文档可以在这里找到:

http://docs.python.org/2/library/csv.htmlhttps://docs.djangoproject.com/en/dev/howto/custom-management-commands/

最新更新