SQLite docs gibt an, dass das bevorzugte Format zum Speichern von datetime-Werten in der DB die Verwendung von Julian Day ist (unter Verwendung von integrierten Funktionen).
Aber alle Frameworks, die ich in Python gesehen habe (pysqlite, SQLAlchemy), speichern die datetime.datetime
-Werte als ISO-formatierte Strings. Warum tun sie das?
Ich versuche normalerweise, die Frameworks so anzupassen, dass sie Datetime als julianday speichern, und das ist ziemlich schmerzhaft. Ich begann zu bezweifeln, dass es sich lohnt.
Bitte teilen Sie Ihre Erfahrung in diesem Bereich mit mir. Ist das Festhalten an julianday sinnvoll?
Speichern Sie es in beiden Richtungen. Frameworks können auf ihre Art und Weise gesetzt werden, und wenn Ihr erwartet, eine rohe Spalte mit einer ISO-formatierten Zeichenfolge zu finden, dann ist das wahrscheinlich mühsamer, als es sich lohnt.
Die Sorge, zwei Spalten zu haben, ist Datenkonsistenz, aber sqlite sollte alles haben, was Sie brauchen, damit es funktioniert. Version 3.3 unterstützt Check Constraints und Trigger. Lesen Sie auf Datums- und Uhrzeitfunktionen nach. Sie sollten tun können, was Sie brauchen, vollständig in der Datenbank.
%Vor%Und wenn Sie nicht tun können, was Sie in der Datenbank benötigen, können Sie eine C-Erweiterung schreiben, um die benötigte Funktionalität zu erhalten. Auf diese Weise müssen Sie das Framework nur berühren, um Ihre Erweiterung zu laden.
Julian Day ist praktisch für alle Arten von Datumsberechnungen, aber es kann den Zeitpunkt Teil anständig speichern (mit präzisen Stunden, Minuten und Sekunden). In der Vergangenheit habe ich sowohl Julian Day Felder (für Daten) als auch Sekunden von der Epoche (für datetime
Instanzen) benutzt, aber nur wenn ich spezielle Bedürfnisse für die Berechnung hatte (von Daten bzw. Zeiten). Die Einfachheit der ISO-formatierten Datumsangaben und Datumsangaben sollte meiner Meinung nach die bevorzugte Wahl sein, sagen wir etwa 97% der Zeit.
Aber typischerweise liest der Mensch nicht direkt aus der Datenbank. Die Bruchzeit an einem Julianischen Tag kann leicht durch (zum Beispiel)
in eine menschliche Lesbarkeit umgewandelt werden %Vor% Weil 2010-06-22 00:45:56
für einen Menschen viel einfacher zu lesen ist als 2455369.5318981484
. Textdaten eignen sich hervorragend für Ad-hoc-Abfragen in SQLiteSpy oder SQLite Manager.
Der Hauptnachteil besteht natürlich darin, dass Textdaten 19 statt 8 Byte benötigen.
Tags und Links python datetime sqlite sqlalchemy pysqlite