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