Sqlite – python Abrufen von CURRENT_TIMESTAMP als datetime-Objekt

Ich verwende eine lokale sqlite-Datenbank, um die Offline-Verarbeitung von Metadaten in meiner Anwendung durchzuführen und die Metadaten beinhalten Zeitstempel.

Ich habe einen Tisch wie folgt erklärt:

CREATE TABLE if not exists tbl_dbsync_meta ( maindb_last_checked TIMESTAMP, global_scores_last_checked TIMESTAMP, localscores_syncup_last_checked TIMESTAMP) 

Nun, an einem Punkt CURRENT_TIMESTAMP ich den CURRENT_TIMESTAMP von sqlite zusammen mit all den anderen Zeitstempeln oben auf, um – natürlich – die Unterschiede in der Zeit zwischen jetzt und all diesen anderen Zeitstempeln herauszufinden.

 SELECT CURRENT_TIMESTAMP as this_time, * FROM tbl_dbsync_meta 

Nun ist das Problem, dass alle anderen Felder korrekt als "datetime" Objekte in Python abgerufen werden. CURRENT_TIMESTAMP wird jedoch als String zurückgegeben.

Ich habe versucht, CURRENT_TIMESTAMP :

 SELECT CAST(CURRENT_TIMESTAMP AS TIMESTAMP), * FROM tbl_dbsync_meta 

Aber jetzt wird es als INTEGER zurückgegeben, und alles, was zurückgekehrt ist, ist das Jahr (2012).

Ein einfacher Weg für mich, um dies zu umgehen, ist, nur direkt die Zeit-Diffs von sqlite selbst zu löschen, anstatt sie in Python abzurufen und dann herumzuspielen. Eine weitere Option ist für mich, die von CURRENT_TIMESTAMP zurückgegebene CURRENT_TIMESTAMP , sie in Python in eine "datetime" umzuwandeln und zu verwenden.

Allerdings muss ich verstehen, was der Unterschied zwischen CURRENT_TIMESTAMP (cast oder anders) und den anderen TIMESTAMP Feldern ist. Es scheint nur falsch, dass das nicht funktioniert.

Danke für Ihre Hilfe.

PS: Bitte beachten Sie, dass ich Python datettime Objekte nie direkt in SQLite speichern kann. Immer SET global_scores_last_checked = CURRENT_TIMESTAMP ich diese Tabelle aktualisieren muss, SET global_scores_last_checked = CURRENT_TIMESTAMP ich einfach SET global_scores_last_checked = CURRENT_TIMESTAMP . Ich rufe nur die Daten von SQLite in Python aus der Notwendigkeit heraus.

One Solution collect form web for “Sqlite – python Abrufen von CURRENT_TIMESTAMP als datetime-Objekt”

Sie müssen PARSE_COLNAMES beim Anschließen setzen:

sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_COLNAMES)

Dann wird das folgende funktionieren:

select current_timestamp as 'ts [timestamp]'

Dies wird "2012-08-07 13:20:42" (<type 'datetime.datetime'>) .

CAST funktioniert nicht (meistens ein Bug) und CURRENT_TIMESTAMP gibt nicht einen Datetime-Typ in der Tat, was möglicherweise ein Bug oder ein Feature (erinnern, Sqlite hat keine Ahnung von Datum / Zeit-Typen, speichert es sie als TEXT / REAL / GANZE ZAHL).

  • Python: Konvertieren von String zum Zeitstempel mit Mikrosekunden
  • Füge 2 Stunden und 1 Tag auf einen Zeitstempel in Django hinzu
  • Bokeh Zeitreihen-Plot-Annotation ist um 1 Stunde ausgeschaltet
  • Wie man ganzzahligen Zeitstempel in Python datetime umwandelt
  • Ändern der Zeitzone auf pandas DatetimeIndex bei der Verknüpfung von DataFrames in Python
  • Zeitstempel außerhalb der Reichweite für Plattform localtime () / gmtime () Funktion
  • Zeitumwandlung von Unix-Zeitstempel nach ISO-Zeitstempel
  • Wie man GMT Zeit in EST Zeit mit Python umwandelt
  • Wie kann ich einen Python-Zeitstempel mit Millisekunden-Granularität erstellen?
  • MongoDb finden Sammlungsdokument nach Zeitstempel
  • Python ist die beste Programmiersprache der Welt.