Isteyak Ahmad Ответов: 1

Python: извлечение данных из бэкэнда и сопоставление поля даты


Привет Команда,

Я и пытаюсь извлечь данные из бэкэнда(oracle) и отфильтровать по столбцу даты.
бэкенд-данные имеют столбец datecolumn, который имеет значение '01-Jan-2016', но когда я извлекаю данные, он дает мне значение "datetime.datetime(2016, 1, 1, 0, 0)" .
Мне трудно использовать условие where в столбце даты.
Пожалуйста, предложите мне правильный код.

Что я уже пробовал:

c.execute("SELECT *FROM DN_T_DSRDTL WHERE ARECOD = '%s'" % areaCD + " and " +" DSRSTA ='%s'" % dtsType + " and " + " invnum ='%s'" % invnum +
"и" + " DSRDAT = '%s'" %startDate )

1 Ответов

Рейтинг:
2

MadMyche

2 очень распространенные проблемы здесь.

Во-первых, ваш код уязвим для SQL-инъекция- Ты должен это сделать . NEVER EVER создайте SQL-запрос, объединив командные строки и пользовательские данные. Если вы вставите несколько специальных символов, то легко откроете всю базу данных для просмотра или удаления.
Поскольку я не очень хорошо владею Python, я не могу сказать вам, как лучше всего переписать это; однако это, по-видимому, очень хороший пример для подражания: OpenStack Docs: Параметризация Запросов К Базе Данных[^]

Второй - дата и время. Большинство языков программирования и баз данных фактически хранят и работают с объектами DateTime в виде числа; и единственный раз, когда существует формат для него, это когда он преобразуется в текст для чтения человеком.
Как уже говорилось ранее, я не очень хорошо владею Python. И вы не упомянули, с каким типом БД вы работаете. Но я могу сказать вам в целом, что ваша БД должна иметь соответствующий тип данных для вашей даты, и когда ваша программа использует параметризованный запрос с правильным типом данных, а база данных имеет тот же тип данных, драйвер базы данных будет заботиться об этом в 99,999% случаев.