J'ai un modèle Django qui contient un enregistrement unique avec une date. Je compte actuellement les enregistrements dans des plages de jours, par ex. X Nombre ont déjà passé la date d'aujourd'hui, X arrivera dans les 10 prochains jours, X arrivera dans les 30 prochains jours. Le code ci-dessous est ce que j'utilise actuellement, il récupère toutes les valeurs d'une requête records.objects.all() par rapport au modèle, puis parcourt chaque objet pour calculer le delta datetime et incrémenter le compteur correspondant.Calcul performant de datetime diffs en jours
for x in records:
if x.date is None:
missingValue += 1
else:
delta = x.date - date.today()
if delta.days < 0:
passed += 1
if delta.days < 10:
tenDays += 1
if delta.days < 30:
thirtyDays += 1
Pour environ 50 000 dossiers cela prend environ 5-6 secondes, ce qui est plus que ce que je voudrais, je suis en train de réduire ce que le nombre d'enregistrements est susceptible d'augmenter. La question est vraiment autour du calcul performant des diffs datetime et le regroupement du nombre de jours résultant comme s'il y avait une meilleure méthode à travers une requête Django ou une autre méthode que je n'ai pas pu trouver je suis ouvert à l'essayer. J'ai exploré l'utilisation de DateAdd dans un SQL brut mais il me semblerait avoir besoin d'interroger la base de données pour chaque plage de dates et me conduirait quand même à devoir parcourir les résultats.
S'il vous plaît préparer http://www.rextester.com démo avec des données d'échantillons et la sortie désirée. Je suis sûr qu'en SQL pur nous pourrions obtenir des temps inférieurs à 1 sec. – lad2025
http://rextester.com/AWPX46055 - Pensez que j'ai bien fait. La sortie désirée est juste le retour des nombres par les groupes ci-dessus, passé, dans les dix jours, dans les trente jours. Je vois aussi un besoin futur pour quelque chose de plus de 30 jours. Les dates limites sont cumulatives. – Draineh
Merci pour les données d'échantillon – lad2025