Comment puis-je ajouter ou enlever des 100 ans pour un champ datetime dans la base de données de Django?
Comment puis-je ajouter ou enlever des 100 ans pour un datetime
champ dans la base de données de Django?
La date est dans la base de données, je veux juste mettre directement à jour le champ sans la récupérer à calculer et puis l'insérer.
- Que voulez-vous dire? Voulez-vous modifier toutes les dates dans la base de données de 100 ans? Voulez-vous écrire une requête qui compare la date de + de 100 ans? Voulez-vous simplement à des dates de sortie avec 100 ans supplémentaires? Quoi?
- Écrire quelque chose comme queryset.mise à jour(end_time=end_time + 1)
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser le relativedelta fonction de la dateutil.relativedelta paquet, qui vous donnera plus précis 'n-il y a des années' calcul:
Puis il suffit de mettre à jour le champ de date que d'autres ont indiqué ici.
Utilisation timedelta. Quelque chose comme ceci devrait faire l'affaire:
La
.update()
méthode sur un Django requête permet de mettre à jour toutes les valeurs sans récupération de l'objet à partir de la base de données. Vous pouvez vous référer à la valeur existante à l'aide d'unF()
de l'objet.Malheureusement Python timedelta ne fonctionne pas avec les années, de sorte que vous aurez à travailler sur 100 ans exprimé en jours (c'est 36524.25):
relativedate()
au lieu detimedelta()
si vous avez besoin de cette précisionF()
objets. Le .2425 dans le nombre 365.2425 est le bit qui essaie de prendre en compte les années bissextiles, autant que vous pouvez avecF()
objets.Lorsque vous obtenez la valeur de Django
datetime
champ de la base de données, il se présente sous la forme d'un Pythondatetime
objet.Je pense que la meilleure façon d'ajouter de 100 ans pour un Python objet datetime est comme ceci:
Enregistrer dans la base de données. Comme indiqué dans les commentaires, si, cela échouera complètement si la date est un saut de jour dans une année qui est un multiple de 400.
d.timetuple()
. Aussi, espérons-led
n'est jamais 29 février 2000 ou le 29 février 2400 🙂Je Sais que c'est une vieille question, mais j'ai eu le problème de trouver un bon un, à résoudre mon problème, j'ai créé ceci: Utiliser le signe plus(+) ou moins(-) pour gérer avec: