[PYTHON] Django Geändert, um viele Daten gleichzeitig zu speichern

Da ich fast 30 tägliche Aufgaben aus TODO Plan gespeichert habe, musste ich hunderte Male auf die Datenbank zugreifen, indem ich reguläre Aufgaben erstellte, und ich wollte die Instabilität und die Belastung der Datenbank verringern.

Trotzdem verstehe ich nicht, was mit dem häufigen Zugriff auf die Datenbank falsch ist ... Um klar zu sein, ich weiß nichts anderes als Geschwindigkeit (lacht).

Diese Implementierung ist

Es ist eine Implementierungsmethode namens massiven_create. Referenzierte Seite: https://tsukasa-blog.com/programming/bulk-create-update/

Infolgedessen wurde der Zugriff auf die Datenbank auf das Zweifache reduziert (⌒∇⌒)

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 =[]

        #Verarbeiten Sie den eingestellten Betrag jeden Tag
        todo_plan = Todo_PlanModel.objects.order_by("hyoujijyun")
        for todoplan in todo_plan:
            if todoplan.cycle == "daily":
            #Verarbeiten Sie den eingestellten Betrag jeden Tag
                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":
            #Wöchentlich verarbeiten
                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":
            #Monatlich verarbeiten
                #Holen Sie sich das Ende des Zielmonats
                lastday = calendar.monthrange(year, month)[1]
                #Ersetzen, wenn das angegebene Datum größer als das Monatsende ist
                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":
                #Prozessmonats- und Datumsspezifikation verarbeiten
                #Holen Sie sich das Ende des Zielmonats
                lastday = calendar.monthrange(year, int(todoplan.month))[1]
                #Ersetzen, wenn das angegebene Datum größer als das Monatsende ist
                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":
                #Woche angeben
                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 = 'Die Verarbeitung ist beendet'
        context = {
            'messages': messages,
            }
        return render(request,'todo/todoplancreate.html', context)

Zuerst wird es aus der Tabelle extrahiert und schließlich mit bule_create in großen Mengen gespeichert.

Es besteht kein Zweifel, dass dies es schneller gemacht hat (⌒∇⌒)

Recommended Posts

Django Geändert, um viele Daten gleichzeitig zu speichern
Speichern Sie mehrere Modelle in einem Formular mit Django
So überprüfen Sie das Verhalten von ORM mit einer Datei mit django
Speichern Sie auf Japanisch in StringProperty im Google App Engine-Datenspeicher
So erhalten Sie einen Überblick über Ihre Daten in Pandas
Speichern Sie das Ergebnis des Crawls mit Scrapy im Google Data Store
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Fehler im Zusammenhang mit Memcached in Django
Implementierung der Login-Funktion in Django
So konvertieren Sie 0,5 in 1056964608 auf einmal
Versuchen Sie, Daten in MongoDB abzulegen
Wie man CSS in Django reflektiert
Verwenden Sie Cloud Dataflow, um das Ziel dynamisch entsprechend dem Wert der Daten zu ändern und in GCS zu speichern
Konvertieren Sie PDFs der verfügbaren Geschäfte von Go To EAT in der Präfektur Kagoshima in CSV
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Speichersparende Konvertierung von Protokolldaten in die Merkmalsmenge der sequentiellen Kategorie unter Berücksichtigung von Zeitreihen
Konvertieren Sie PDF-Dateien von Go To EAT-Mitgliedsgeschäften in der Präfektur Ishikawa in CSV
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
So registrieren Sie nur eine Daten auf dem Django-Verwaltungsbildschirm
So überprüfen Sie die Version von Django
So löschen Sie abgelaufene Sitzungen in Django
Konvertierung von Zeitdaten in 25-Uhr-Notation
Hallo Welt nicht localhost in Django
So führen Sie vom Server gesendete Ereignisse in Django durch
[Einführung in Data Scientist] Grundlagen von Python ♬
Bücher über Datenwissenschaft, die 2020 gelesen werden sollen
So können Sie die Funktionen des Django Rest Frameworks in einer Datei ausprobieren
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
Wie kann man in Go so etwas wie eine Liste von void * (oder Variantentypen) erreichen?
So identifizieren Sie die Zugriffsquelle in der generischen Klassenansicht von Django eindeutig
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Konvertieren Sie das PDF der Go To EAT-Mitgliedergeschäftsliste in der Präfektur Niigata in CSV
Ich bin süchtig nach dem Unterschied, wie Flask und Django JSON-Daten empfangen
Versuchen Sie, die Eisenbahndaten der nationalen Landnummern in 3D anzuzeigen