https://github.com/django-import-export/django-import-export https://django-import-export.readthedocs.org/en/latest/index.html
C'est un django-import-export
qui est si lourd qu'il ne peut pas être aidé simplement en essayant d'importer un CSV d'environ 2000 lignes au maximum, mais il semble qu'une grande quantité d'accès à la base de données soit prise.
Cependant, si vous réduisez simplement l'accès à la base de données, ce sera plus rapide. Échantillon pour le moment.
from import_export.admin import ImportExportModelAdmin
from import_export import fields, resources, widgets
from import_export.instance_loaders import CachedInstanceLoader
from .models import Foo
class FooResource(resources.ModelResource):
related_item = fields.Field(
column_name='related_item_id',
attribute='related_item_id',
widget=widgets.IntegerWidget(),
)
class Meta:
model = Foo
skip_unchanged = True
instance_loader_class = CachedInstanceLoader
class FooAdmin(ImportExportModelAdmin):
resource_class = FooResource
skip_admin_log = True
Si les champs du modèle sont définis avec ForeignKey
, la bibliothèque ImportExport utilisera désormais widgets.ForeignKeyWidget
.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/resources.py#L671
Puisque ce type accède à la base de données au moment de l'importation, ce sera plus rapide si vous le remplacez par widgets.IntegerWidget
.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/widgets.py#L272
Au moment de l'importation, la base de données est accédée avec la valeur de «PrimaryKey» sur chaque ligne.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/instance_loaders.py#L33
Donc, si vous utilisez CachedInstanceLoader
, qui lira tout d'abord, puis le fera, vous n'aurez à accéder à la base de données qu'une seule fois, ce qui est bien.
Si vous écrivez skip_unchange = True
pour que les instructions UPDATE inutiles ne soient pas exécutées, la mise à jour sera un peu plus rapide.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/resources.py#L427
Cela fera beaucoup de journaux de modifications soigneusement un par un, donc veuillez refuser poliment avec skip_admin_log = True
.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/admin.py#L163