如何使用django-import-export库优化向Django模型的数据导入

问题描述

我一直在使用django-import-export库将excel的数据上传到Django模型,并且一直运行良好,直到我必须上传20,000行的excel,并且花了无限的时间才能完成此操作

您能提出优化数据的正确方法吗?上传到Django模型,在这里我可以轻松上传excel文件并将这些数据保存在数据库中。

支持

您好,以下是我尝试过的admin.py代码,但未定义其抛出错误“ using_transactions”,请确认我在哪里出错以及如何更改以在更短的时间内导入批量数据- / p>

"The value of z is 11."

,并且在settings.py文件中,我设置了

from django.contrib import admin
from import_export import resources
from .models import Station,Customer
from import_export.admin import ImportExportModelAdmin

# Register your models here.

class StationResource(resources.ModelResource):

    def get_or_init_instance(self,instance_loader,row):
        self.bulk_create(self,using_transactions,dry_run,raise_errors,batch_size=1000)

    class Meta:
        model=Station
        use_bulk=True
        batch_size = 1000
        force_init_instance = True


class StationAdmin(ImportExportModelAdmin):
        resource_class=StationResource

admin.site.register(Station,StationAdmin)

解决方法

我不会对大数据使用import-export, 相反,我会将数据文件从excel文件中另存为csv,然后使用pandas将数据桥接到数据库中。熊猫分批完成它。

,

import-export提供了一种bulk import模式,该模式利用了Django的bulk operations

只需在资源上启用use_bulk标志:

 class Meta:
        model = Book
        fields = ('id','name','author_email','price')
        use_bulk = True

应该可以在几秒钟内导入2万行,但这取决于您的数据,您可能需要调整一些设置。另外,请阅读有关批量导入的caveats

回购中有more detailed information

但是,即使没有批量模式,它也应该能够在几分钟内导入2万行。如果花费的时间更长,则可能是导入过程正在对数据库进行不必要的读取(即每一行)。启用S​​QL日志记录将对此有所启发。 CachedInstanceLoader可能对此有所帮助。