Подтверждение дат Oracle в Python - PullRequest
1 голос
/ 12 марта 2009

Наша Python CMS хранит некоторые значения даты в столбце общей таблицы атрибутов varchar . Некоторые из этих дат позже перемещаются в таблицу с фактическим столбцом date . Если пользователь CMS ввел недопустимую дату, она не перехватывается до миграции, когда запрос завершается с ошибкой «Недопустимая строка».

Как я могу использовать Python, чтобы убедиться, что все даты, введенные в нашу CMS, являются действительными представлениями строковых дат Oracle?

Ответы [ 3 ]

5 голосов
/ 12 марта 2009

Как я могу использовать Python, чтобы убедиться, что все даты, введенные в нашу CMS, являются действительными представлениями строковых дат Oracle?

Я бы немного изменил подход. Сделайте, чтобы Python анализировал исходный ввод даты как можно более щедро, а затем выводил дату в заведомо хорошем представлении.

dateutil * Либеральный парсер может быть хорошим местом для начала:

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

Я не уверен, что «% d-% b-% y» на самом деле все еще является правильным форматом даты для Oracle, но, вероятно, он будет примерно таким же, в идеале с четырехзначными годами и без учета названий месяцев. (Ловушка:% b зависит от локали, поэтому может возвращать нежелательные названия месяцев в неанглийской ОС.) Возможно, «strftime ('% Y-% m-% d')», за которым следует «TO_DATE (..., 'YYYY»). -MM-DD ') ”на стороне Oracle нужен?

1 голос
/ 12 марта 2009

Формат строки даты, которую Oracle распознает как дату, является настраиваемым свойством базы данных, и поэтому считается неуместным полагаться на неявное преобразование строк в даты.

Обычно формат дат Oracle - «ДД-МЕС-ГГГГ», но вы не всегда можете рассчитывать на то, что он установлен таким образом.

Лично я хотел бы, чтобы CMS записывал в эту таблицу «атрибутов» в стандартном формате, например «ГГГГ-ММ-ДД», а затем, в зависимости от того, какое задание перемещает это в столбец ДАТА, можно явно преобразовать значение с помощью to_date (value, ' YYYY-MM-DD '), и у вас не возникнет никаких проблем.

0 голосов
/ 12 марта 2009

Подтвердите как можно раньше. Почему вы не храните даты как даты в вашей Python CMS?

Трудно знать, какой датой является строка типа '03 -04-2008 '. Это 3 апреля 2008 или 4 марта 2008? Американец скажет 4 марта 2008 года, а голландец скажет 3 апреля 2008 года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...