PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Django DateTime-Feld zum Generieren von Zeitstempelfeldern ohne Zeitzone

Die Datentypen für Postgres in Django werden dem Zeichenfolgenliteral timestamp with time zone zugeordnet , und es scheint keine Option zu geben, diesen Typ zu ändern.

Soweit mir bekannt ist, haben Sie drei Möglichkeiten:

  1. Nutzen Sie Djangos Hook zum Ausführen von raw sql nach der create table-Anweisung . Erstellen Sie dazu ein Verzeichnis namens sql in Ihrer App und eine Datei namens mymodel.postgres_psycopg2.sql in diesem Verzeichnis . Platzieren Sie dort Ihre alter table-Anweisungen.

  2. Schreiben Sie ein benutzerdefiniertes Feld, um die Modifikatoren für das Zeitstempelfeld nach Belieben zu definieren. Siehe "benutzerdefinierte Modellfelder schreiben ".

  3. Lassen Sie das Django-Feld unverändert und führen Sie die Zeitzonenumwandlung in Ihrer Anwendung durch, damit Sie absolut sicher sind, dass Sie die richtige Zeit übergeben.

Meine persönliche Präferenz für Datenintegrität ist Nr. 3. Genauso wie bei Zeichenkodierungen, bei denen Sie immer sicher sein wollen, dass Sie den Zeichensatz kennen und Konvertierungen richtig handhaben, fühle ich mich viel wohler mit Datums-/Zeitangaben, deren Attribute (einschließlich TZ) so genau wie möglich definiert sind. Sie können heute sicher sein, dass alle Ihre Eingaben bereits in UTC in Ihre App eingehen, aber das kann sich ändern, insbesondere wenn die Zeitstempel von Endbenutzern bereitgestellt werden. Für das, was es wert ist, würde ich die Extrameile gehen, den Zeitstempel in der App in UTC konvertieren und ihn mit UTC als Zeitzone in der DB speichern.