[PYTHON] Pourquoi l'importation de django-import-export est si lente et que faire

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.

Solution

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

N'utilisez pas ForeignKeyWidget

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

Utiliser CachedInstanceLoader

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.

Ignorer les données inchangées (utilisez skip_unchange = True)

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

Évitez de créer des journaux de modifications sur l'écran d'administration (utilisez skip_admin_log = True)

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

Recommended Posts

Pourquoi l'importation de django-import-export est si lente et que faire
La programmation parallèle est-elle difficile, et si oui, que pouvez-vous y faire?
[EC2] Que faire lorsque le sélénium est bloqué et que le traitement ne se poursuit pas
curl: (60) Que faire lorsque le certificat de l'émetteur n'est pas valide.
Que faire lorsque "impossible d'importer le nom xxx" [Python]
Je ne peux pas utiliser le shell pipenv ... que dois-je faire?
Que faire si pyenv n'est pas activé (zsh)
Que faire lorsque seule la fenêtre est affichée et que rien ne s'affiche dans le pygame
Que faire lorsque la police PyCharm est étrange ou déformée
Que faire lorsqu'une erreur se produit avec import _ssl
Que faire lorsque swagger-codegen est terminé avec python et Erreur d'importation: aucun module nommé n'apparaît
[Python] Python et sécurité-① Qu'est-ce que Python?
Que faire si vous chattez ou suivez un fichier binaire et que le terminal est brouillé
NameError: le nom global'dot_parser 'n'est pas défini et que faire quand il apparaît en python
Que faire si le nom d'utilisateur est modifié et que le chemin de la bibliothèque pyenv ne passe pas
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
[Beanstalk] Que faire lorsqu'une erreur se produit avec import uuid
Que faire lorsque l'inode est épuisé sur EC2 Linux
Que faire lorsque le type de valeur est ambigu en Python?
Que faire quand Ubuntu plante
Que faire si yum casse
Pourquoi ma redis était si lente
Que faire avec l'installation de Magics
Que faire avec la sortie de PYTHON?
Que faire s'il y a un décimal dans python json .dumps
Que faire lorsque le résultat téléchargé via scrapy est en anglais
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Que faire si ipython et python démarrent avec des versions différentes
[Python] Que faire lorsqu'une erreur liée à l'authentification SSL est renvoyée
J'ai essayé de savoir ce que je pouvais faire car le tranchage est pratique
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
[Python] Qu'est-ce que la série pandas et DataFrame?
[Pandas] Qu'est-ce que set_option [Comment utiliser]
Que faire après l'installation de Linux (Ubuntu)
Résumons ce que vous voulez faire.
Comment utiliser is et == en Python
Que faire si CERTIFICATE_VERIFY_FAILED se produit lorsque nltk.download () est effectué sur macOS pyhon
[Note] Que faire si la bibliothèque Qt entre en conflit entre pyqt et opencv
Que faire si l'abandon s'affiche lors de la saisie d'une vidéo de caméra dans OpenCV
Que faire si le support japonais n'est pas complètement installé sur Ubuntu 16.04
Que faire si (base) est affiché au début du terminal Mac