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