https://github.com/django-import-export/django-import-export https://django-import-export.readthedocs.org/en/latest/index.html
Es ist ein Django-Import-Export, der so schwer ist, dass man nicht einfach versuchen kann, eine CSV mit höchstens 2000 Zeilen zu importieren, aber es scheint, dass eine große Menge an DB-Zugriff genommen wird.
Wenn Sie jedoch nur den Zugriff auf die Datenbank reduzieren, wird dies schneller. Probe vorerst.
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
Wenn die Modellfelder mit "ForeignKey" definiert sind, verwendet die ImportExport-Bibliothek jetzt "Widgets.ForeignKeyWidget".
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/resources.py#L671
Da dieser Typ zum Zeitpunkt des Imports auf die Datenbank zugreift, ist es schneller, wenn Sie sie durch "widgets.IntegerWidget" ersetzen.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/widgets.py#L272
Zum Zeitpunkt des Imports wird auf die Datenbank mit dem Wert "PrimaryKey" in jeder Zeile zugegriffen.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/instance_loaders.py#L33
Wenn Sie also "CachedInstanceLoader" verwenden, der zuerst alles liest und dann ausführt, müssen Sie nur einmal auf die Datenbank zugreifen, was sehr schön ist.
Wenn Sie skip_unchange = True
schreiben, damit unnötige UPDATE-Anweisungen nicht ausgeführt werden, ist das Update etwas schneller.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/resources.py#L427
Es werden viele Änderungsprotokolle sorgfältig nacheinander erstellt. Bitte lehnen Sie dies höflich mit skip_admin_log = True
ab.
https://github.com/django-import-export/django-import-export/blob/0.4.5/import_export/admin.py#L163