问题描述
我一直在使用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万行。如果花费的时间更长,则可能是导入过程正在对数据库进行不必要的读取(即每一行)。启用SQL日志记录将对此有所启发。 CachedInstanceLoader
可能对此有所帮助。