[PYTHON] Django a changé pour enregistrer beaucoup de données à la fois

Depuis que j'ai enregistré près de 30 tâches quotidiennes de TODO Plan, j'ai dû accéder à la base de données des centaines de fois en créant des tâches régulières, et je voulais réduire l'instabilité et la charge sur la base de données.

Même ainsi, je ne comprends pas ce qui ne va pas avec l'accès fréquent à la base de données ... Pour être clair, je ne connais rien d'autre que la vitesse (rires).

Cette implémentation est

C'est une méthode d'implémentation appelée bulk_create. Page référencée: https://tsukasa-blog.com/programming/bulk-create-update/

En conséquence, l'accès à la base de données a été réduit à 2 fois (⌒∇⌒)

todo/views.py



def todoplancreatefunc(request):
    if request.method == 'GET':
        return render(request,'todo/todoplancreate.html')
    else:
        yearmonth = request.POST['yearmonth']
        year = int(yearmonth[0:4])
        month= int(yearmonth[5:7])
        lastday = calendar.monthrange(year, month)[1]
        new_object_list =[]

        #Traitez le montant défini chaque jour
        todo_plan = Todo_PlanModel.objects.order_by("hyoujijyun")
        for todoplan in todo_plan:
            if todoplan.cycle == "daily":
            #Traitez le montant défini chaque jour
                for i in range(lastday):
                    sakuseiday = datetime.date(year,month,i + 1)
                    new_object = TodoModel(
                        title = todoplan.title,
                        memo = todoplan.memo,
                        priority = todoplan.priority,
                        shisetsu_name = todoplan.shisetsu_name,
                        user = todoplan.user,
                        plants_startdate = sakuseiday,
                        plants_enddate = sakuseiday,
                        )
                    new_object_list.append(new_object)
            elif todoplan.cycle == "everyweek":
            #Traiter chaque semaine
                for i in range(5):
                    day = get_day_of_nth_dow(year, month, i + 1, int(todoplan.youbi))
                    if day != None:
                        sakuseiday = datetime.date(year, month, day)
                        new_object = TodoModel(
                            title = todoplan.title,
                            memo = todoplan.memo,
                            priority = todoplan.priority,
                            shisetsu_name = todoplan.shisetsu_name,
                            user = todoplan.user,
                            plants_startdate = sakuseiday,
                            plants_enddate = sakuseiday,
                        )
                        new_object_list.append(new_object)
            
            elif todoplan.cycle == "monthly":
            #Traiter mensuellement
                #Obtenez la fin du mois cible
                lastday = calendar.monthrange(year, month)[1]
                #Remplacer si la date spécifiée est postérieure à la fin du mois
                if todoplan.day > lastday:
                    day = lastday
                else:
                    day = todoplan.day
                sakuseiday = datetime.date(year, month, day)
                new_object = TodoModel(
                    title = todoplan.title,
                    memo = todoplan.memo,
                    priority = todoplan.priority,
                    shisetsu_name = todoplan.shisetsu_name,
                    user = todoplan.user,
                    plants_startdate = sakuseiday,
                    plants_enddate = sakuseiday,
                    )
                new_object_list.append(new_object)

            elif todoplan.cycle == "day":
                #Spécification du mois et de la date du processus
                #Obtenez la fin du mois cible
                lastday = calendar.monthrange(year, int(todoplan.month))[1]
                #Remplacer si la date spécifiée est postérieure à la fin du mois
                if todoplan.day > lastday:
                    day = lastday
                else:
                    day = todoplan.day
                sakuseiday = datetime.date(year, int(todoplan.month), day)
                new_object = TodoModel(
                    title = todoplan.title,
                    memo = todoplan.memo,
                    priority = todoplan.priority,
                    shisetsu_name = todoplan.shisetsu_name,
                    user = todoplan.user,
                    plants_startdate = sakuseiday,
                    plants_enddate = sakuseiday,
                    )
                new_object_list.append(new_object)

            elif todoplan.cycle == "week":
                #Spécifiez la semaine
                day = get_day_of_nth_dow(year, month, todoplan.week, int(todoplan.youbi))
                if day == None:
                    day = lastday = calendar.monthrange(year, month)[1]
                sakuseiday = datetime.date(year, month, day)
                new_object = TodoModel(
                    title = todoplan.title,
                    memo = todoplan.memo,
                    priority = todoplan.priority,
                    shisetsu_name = todoplan.shisetsu_name,
                    user = todoplan.user,
                    plants_startdate = sakuseiday,
                    plants_enddate = sakuseiday,
                    )
                new_object_list.append(new_object)
        TodoModel.objects.bulk_create(new_object_list)
        messages = 'Le traitement est terminé'
        context = {
            'messages': messages,
            }
        return render(request,'todo/todoplancreate.html', context)

Tout d'abord, il est extrait de la table, et enfin, il est enregistré en masse avec bule_create.

Il ne fait aucun doute que cela l'a rendu plus rapide (⌒∇⌒)

Recommended Posts

Django a changé pour enregistrer beaucoup de données à la fois
Enregistrez plusieurs modèles sous un seul formulaire avec Django
Comment vérifier le comportement d'ORM avec un fichier avec django
Enregistrer en japonais dans StringProperty dans le magasin de données Google App Engine
Comment obtenir un aperçu de vos données dans Pandas
Enregistrez le résultat de l'exploration avec Scrapy dans Google Data Store
Comment créer une grande quantité de données de test dans MySQL? ??
Créez une fonction pour obtenir le contenu de la base de données dans Go
Erreur liée à memcached dans django
Implémentation de la fonction de connexion dans Django
Comment convertir 0,5 en 1056964608 en un seul coup
Essayez de mettre des données dans MongoDB
Comment refléter CSS dans Django
Utilisez Cloud Dataflow pour modifier dynamiquement la destination en fonction de la valeur des données et enregistrez-la dans GCS
Convertir le PDF des magasins disponibles de Go To EAT dans la préfecture de Kagoshima en CSV
Comment envoyer une image visualisée des données créées en Python à Typetalk
Conversion d'économie de mémoire des données de journal en quantité de caractéristiques de catégorie séquentielle en tenant compte des séries temporelles
Convertir le PDF des magasins membres Go To EAT de la préfecture d'Ishikawa en CSV
Comment gérer les caractères déformés dans json de Django REST Framework
Comment enregistrer une seule donnée sur l'écran de gestion de Django
Comment vérifier la version de Django
Comment supprimer des sessions expirées dans Django
Conversion des données de temps en notation 25 heures
Bonjour tout le monde pas localhost à Django
Comment faire des événements envoyés par le serveur dans Django
[Introduction au Data Scientist] Bases de Python ♬
Livres sur la science des données à lire en 2020
Comment vous permettre d'essayer les fonctionnalités du framework django rest dans un seul fichier
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Comment réaliser quelque chose comme une liste de void * (ou de type de variante) dans Go?
Comment identifier de manière unique la source d'accès dans la vue de classe générique Django
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Convertir le PDF de la liste des magasins membres Go To EAT dans la préfecture de Niigata en CSV
Je suis accro à la différence dans la façon dont Flask et Django reçoivent les données JSON
Essayez d'afficher les données ferroviaires des informations numériques des terres nationales en 3D