2009-12-15 7 views
0

Lorsque vous stockez une heure en Python (dans mon cas, dans ZODB, mais s'applique à n'importe quelle DB), quel format (epoch, datetime, etc) utilisez-vous et pourquoi?Temps de stockage en Python - Meilleur format?

+0

Quels sont les temps utilisés? Avez-vous besoin de les comparer facilement? Voulez-vous rechercher facilement chaque mercredi pour un fuseau horaire donné? Etes-vous stocker des temps qui s'étendent sur un jour, 30 jours, 300 jours, 3000 jours ou? Posez une meilleure question, obtenez une meilleure réponse. – Kurt

Répondre

5

Le module datetime a les types standard pour la gestion moderne des dates et des heures en Python, et je l'utilise parce que j'aime les standards (je pense aussi que c'est bien conçu); J'ai généralement aussi des informations de fuseau horaire via pytz.

La plupart des DB ont naturellement leur propre façon de stocker les dates et les heures, mais les adaptateurs Python modernes vers/depuis les DB supportent généralement datetime (une autre bonne raison de l'utiliser ;-) du côté Python - par exemple, c'est ce que j'obtiens avec le stockage de Google App Engine, le SQLite intégré de Python, etc.

5

Si la base de données a un format date-heure natif, j'essaie d'utiliser cela même s'il s'agit d'un codage et d'un décodage. Même si ce n'est pas 100% standard comme SQLITE, j'utiliserais toujours les adaptateurs de date et d'heure décrits près du bas du SQLITE3 help page.

Dans tous les autres cas j'utiliserais ISO 8601 format sauf s'il s'agissait d'une base de données d'objets Python qui stocke un type de codage binaire de l'objet.

Le format ISO 8601 est triable et est souvent requis dans les bases de données pour l'indexation. De plus, il n'est pas ambigu, alors vous savez que le 2009-01-12 était en janvier et non en décembre. Les personnes qui changent la position du mois et du jour, mettent toujours l'année en dernier, alors en la mettant en premier, les gens ne peuvent pas automatiquement prendre le format incorrect.

Bien sûr, vous pouvez reformater comme vous le souhaitez pour l'affichage et la saisie dans vos applications, mais les données dans les bases de données sont souvent visualisées avec d'autres outils, pas avec votre application.

0

Secondes depuis l'époque est le format le plus compact et portable pour stocker des données de temps. Le format DATETIME natif dans MySQL, par exemple, prend 8 octets au lieu de 4 pour TIMESTAMP (secondes depuis l'époque). Vous éviterez également les problèmes de fuseau horaire si vous devez obtenir le temps des clients dans plusieurs emplacements géographiques. Les opérations logiques (pour le tri, etc.) sont aussi les plus rapides sur les entiers.