2009-03-12 16 views
1

Unsere Python CMS speichert einige Datumswerte in einem allgemeinen „Attribut“ varchar Spalte der Tabelle. Einige dieser Daten werden später in eine Tabelle mit einer tatsächlichen Datum Spalte verschoben. Wenn der CMS-Benutzer ein ungültiges Datum eingegeben hat, wird er erst bei der Migration abgefangen, wenn die Abfrage mit dem Fehler "Ungültiges Zeichenfolgendatum" fehlschlägt.Validieren von Oracle Daten in Python

Wie kann ich Python verwenden, um sicherzustellen, dass alle Daten in unser CMS setzen gelten Oracle String Datum Darstellungen?

Antwort

5

Wie kann ich mithilfe von Python sicherstellen, dass alle in unser CMS eingegebenen Daten gültige Datumsangaben für die Zeichenfolge darstellen?

Ich würde den Ansatz ein wenig ändern. Lassen Sie Python die ursprüngliche Datumseingabe so fehlerfrei wie möglich analysieren und geben Sie dann das Datum in bekannter Form aus.

dateutil ‚s liberal-Parser ein guter Anfang sein kann:

import dateutil.parser 
d= dateutil.parser.parse('1/2/2003') 
d.strftime('%d-%b-%y') 

Ich bin nicht sicher 'eigentlich noch das richtige Datumsformat für Oracle% d-% b-% y' ist, aber es wird wahrscheinlich etwas Ähnliches sein, idealerweise mit vierstelligen Jahren und ohne Abhängigkeit von Monatsnamen. (Trap:% b ist länderabhängig und kann daher unerwünschte Monatsnamen auf einem nicht englischen Betriebssystem zurückgeben.) Vielleicht "strftime ('% Y-% m-% d')" gefolgt von "TO_DATE (..., 'YYYY -MM-DD ') "am Oracle-Ende benötigt?

+0

ich würde ‚% d-% b-% Y‘ (4-stellige Jahre), aber Sie haben Recht über die locale Abhängigkeit. +1 für einen großartigen Ansatz. –

1

Das Format eines Datums-String, dass Oracle erkennt als ein Datum eine konfigurierbare Eigenschaft der Datenbank ist und als solche ist es schlechter Stil betrachtet auf implizite Konvertierungen von Strings Daten angewiesen.

Typischerweise stammt Oracle-Format ‚DD-MON-YYYY‘, aber man kann nicht immer auf sie verlassen, dass die Art und Weise festgelegt werden.

Persönlich würde ich das CMS schreiben, um diese "Attribut" -Tabelle in einem Standardformat wie 'JJJJ-MM-DD', und dann, welcher Job verschiebt das zu einer Spalte DATE kann explizit den Wert mit to_date (Wert, "JJJJ-MM-TT") und Sie werden keine Probleme haben.

-1

Bestätigen Sie so früh wie möglich. Warum speichern Sie keine Daten als Daten in Ihrem Python-CMS?

Es ist schwierig zu wissen, was wie '03 -04-2008' einen String aktuell ist. Ist es 3. April 2008 oder 4. März 2008? Ein Amerikaner werden sagen, 4. März 2008, aber eine holländische Person wird sagen 3. April 2008.