【问题标题】:How to Optimize Data Importing to a Django Model using django-import-export library如何使用 django-import-export 库优化数据导入到 Django 模型
【发布时间】:2021-01-12 19:22:03
【问题描述】:

我一直在使用 django-import-export 库将我的数据作为 excel 上传到 Django 模型,它一直运行良好,直到我不得不上传一个包含 20,000 行的 excel,而完成这个操作只需要无限时间.

您能否建议优化数据上传到 Django 模型的正确方法,在那里我可以轻松上传 excel 文件并将该数据保存在我的数据库中。

请支持。

您好,下面是我尝试过的 admin.py 的代码,但未定义其引发错误“using_transactions”,请确认我哪里出错了,我要更改什么以在更短的时间内导入批量数据--

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)

在我设置的 settings.py 文件中-

IMPORT_EXPORT_USE_TRANSACTIONS = True
IMPORT_EXPORT_SKIP_ADMIN_LOG = True

【问题讨论】:

  • 你能告诉我们一些你的代码吗?

标签: django django-models data-import bulk-load django-import-export


【解决方案1】:

我不会对大数据使用导入导出, 相反,我会从我的 excel 文件中将数据文件另存为 csv,并使用 pandas 将数据桥接到数据库中。 Pandas 是分批做的。

【讨论】:

  • 这样可以吗?如果您必须不断更改数据,那么管理集成如何?它是否运作良好。你能分享一个例子吗?长期以来一直被困在这个问题上,需要为此找到可行的解决方案。
【解决方案2】:

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

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

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

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

回购中有more detailed information

但是,即使没有批量模式,它也应该能够在几分钟内导入 20k 行。如果花费的时间更长,那么导入过程可能会在数据库上进行不必要的读取(即每一行)。启用 SQL 日志记录将对此有所了解。 CachedInstanceLoader 可能会对此有所帮助。

【讨论】:

  • 您好,我查看了您共享的资源并尝试修改 admin.py,但仍然不太确定我需要进一步添加或删除什么。在下一条评论中添加来自 admin.py 的代码,请支持。我到底需要改变什么才能在更短的时间内导入数据。
  • 嗨,我已经分享了我上面的代码,请检查并支持。
  • 我建议研究文档和源代码(如有必要)并弄清楚您的代码在做什么。您现在拥有它的方式将尝试在尝试读取完全错误的每一行时进行批量创建。从长远来看,了解您的代码在做什么将为您节省大量时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多