[PYTHON] Warum Django-Import-Export-Import so langsam ist und was zu tun ist

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.

Lösung

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

Verwenden Sie nicht ForeignKeyWidget

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

Verwenden Sie CachedInstanceLoader

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.

Unveränderte Daten ignorieren (mit skip_unchange = True)

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

Erstellen Sie kein Änderungsprotokoll des Verwaltungsbildschirms (verwenden Sie skip_admin_log = True).

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

Recommended Posts

Warum Django-Import-Export-Import so langsam ist und was zu tun ist
Ist die parallele Programmierung schwierig, und wenn ja, was können Sie dagegen tun?
[EC2] Was tun, wenn Selen festsitzt und die Verarbeitung nicht fortgesetzt wird?
curl: (60) Was tun, wenn das Ausstellerzertifikat ungültig ist?
Was tun, wenn "Name xxx nicht importiert werden kann" [Python]
Ich kann keine Pipenv-Shell verwenden ... was soll ich tun?
Was tun, wenn pyenv nicht aktiviert ist (zsh)
Was tun, wenn nur das Fenster angezeigt wird und im Pygame nichts angezeigt wird?
Was tun, wenn die PyCharm-Schrift seltsam oder verstümmelt ist?
Was tun, wenn beim Importieren von _ssl ein Fehler auftritt?
Was tun, wenn Swagger-Codegen mit Python und Importfehler ausgeführt wird? Es wird kein Modul mit dem Namen angezeigt
[Python] Python und Sicherheit - is Was ist Python?
Was tun, wenn Sie eine Binärdatei katzen oder verfolgen und das Terminal verstümmelt ist?
NameError: Der globale Name'dot_parser 'ist nicht definiert und was ist zu tun, wenn er in Python angezeigt wird?
Was tun, wenn der Benutzername geändert wird und der Pfad der pyenv-Bibliothek nicht übergeben wird?
Geben und meinen Sie die Einschränkungsoption in scipy.optimize.minimize
[Beanstalk] Was tun, wenn beim Importieren der UUID ein Fehler auftritt?
Was tun, wenn der Inode unter EC2 Linux erschöpft ist?
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Was tun, wenn Ubuntu abstürzt?
Was tun, wenn Yum kaputt geht?
Warum meine Redis so langsam waren
Was tun mit der Installation von Magics?
Was tun mit PYTHON Release?
Was tun, wenn in python json .dumps eine Dezimalstelle enthalten ist?
Was tun, wenn das über Scrapy heruntergeladene Ergebnis auf Englisch ist?
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
Was tun, wenn ipython und python mit unterschiedlichen Versionen starten?
[Python] Was tun, wenn ein Fehler im Zusammenhang mit der SSL-Authentifizierung zurückgegeben wird?
Ich habe versucht herauszufinden, was ich tun kann, weil das Schneiden bequem ist
Was tun, wenn in der Anaconda-Umgebung die Warnung "Die Umgebung ist konsistent ..." angezeigt wird
Was tun, wenn eine Warnmeldung in der Pip-Liste angezeigt wird?
[Python] Was ist Pandas Series und DataFrame?
[Pandas] Was ist set_option?
Was tun nach der Installation von Linux (Ubuntu)
Lassen Sie uns zusammenfassen, was Sie tun möchten.
Verwendung ist und == in Python
Was tun, wenn CERTIFICATE_VERIFY_FAILED auftritt, wenn nltk.download () unter macOS pyhon ausgeführt wird?
Was tun, wenn bei der Eingabe eines Kameravideos in OpenCV ein Abbruch angezeigt wird?
Was tun, wenn die japanische Unterstützung unter Ubuntu 16.04 nicht vollständig installiert ist?
Was tun, wenn (Basis) am Anfang des Mac-Terminals angezeigt wird?