2012-04-10 4 views
3

Ich habe eine SQL Server-Tabelle, die einige datetime Daten enthält. Ich verwende ein Python-Skript mit pymssql, um eine Verbindung zur Datenbank herzustellen und Abfragen auszuführen.Python und SQL Server: Problem mit Datetime Daten

Das Problem, das ich habe, ist, dass, wenn meine Abfragen Datetime-Daten zurückgeben, die Daten verschoben werden und nicht mehr genau sind. Ein Dateneintrag in meiner Tabelle entspricht beispielsweise dem Datum "2012-03-27", aber wenn ich ihn in meinem Skript als datetime-Objekt in Python abrufe und abspeichere, wird das Datum als 2012-01-03 gespeichert ".

Irgendwelche Ideen, wie Sie das beheben können? Sollte ich eine Bibliothek wie pytz verwenden?

Danke!

+0

Dies scheint unglaublich seltsam. Es ist unmöglich, dass etwas, das den 27. März bis zum 3. Januar "umwandelt", ein Zeitzonenproblem sein könnte. Nicht so weit, wie ich sehen kann. Könnten Sie den Bereich für den zugehörigen Code einfügen, von dem Sie das Datum erhalten haben, an dem Sie es speichern? –

+0

Sie suchen offensichtlich die falschen Daten. Gib den Code an. – WeaselFox

+0

Wenn nicht etwas aus meinem Kopf passiert (was oft passiert!), Sollte dies nicht passieren. Aber Dinge passieren. Haben Sie Ihren Code gründlich überprüft? –

Antwort

0

Ich bin immer noch nicht sicher, was dieses Problem verursacht, aber ich fand eine Lösung: wandelt die datetime Daten varchar zu geben, wenn die Abfrage ausgeführt wird:

select convert(varchar(20),event_time,120) from event_detail; 

Zuvor ich diese Abfrage ausführen:

select event_time from event_detail; 

wo event_time ist vom Typ datetime

1

I mit p das gleiche Problem habe ymssql Version 1.02. Obwohl es nicht die sauberste Vorgehensweise ist, verwende ich die vom OP vorgeschlagene Problemumgehung und konvertiere den String-Wert in ein Python-Datetime-Objekt mit den korrekten Werten unter Verwendung des Moduls dateutil.parser. Hier ist der Code, den ich verwende, vorausgesetzt, dass iso_datetime_string die Zeichenfolge mit der Datumszeit im ISO-Format enthält, wie von der Problemumgehung zurückgegeben: