Дата выпуска — python для oracle sql

#python #sql #python-3.x #oracle-sqldeveloper #cx-oracle

#питон #sql #python-3.x #oracle-разработчик sqld #cx-oracle

Вопрос:

У меня есть run_dt, который создает проблему при создании таблицы, тип данных столбца изменяется сам по себе как символ.

 print(execution_dt) 2020-10-05 14:24:25.352317   run_dt= execution_dt.date()   print(run_dt) 2020-10-05  run_dt=str(run_dt) print(run_dt) 2020-10-05  type(run_dt) lt;class 'str'gt;  

У меня есть база данных Oracle в качестве бэкэнда и python для написания сценариев.

 cursor.execute(f'''create table taxes select age,  name,  '{run_dt}' as max_upload_date,  from Employee a left outer join code cd on (s.emp_id = cd.code)  and s.transaction_date = {repr(run_dt)} ''')  

если я выполню приведенный выше код python, он создаст таблицу, но затем тип данных max_upload_date — столбца автоматически станет — Char.

если я применю функцию to_date, как показано ниже:

 to_date('{run_dt}') as max_upload_date,  

Я получаю следующую ошибку:

ошибка — cx_Oracle.Ошибка базы данных: ORA-01861: литерал не соответствует строке формата

пожалуйста, помогите. заранее спасибо.

Ответ №1:

TO_DATE должно быть в порядке, но только если вы примените соответствующую маску формата (вместо того, чтобы позволять Oracle угадывать, что делать; как вы можете видеть, это не удалось).:

 to_date('2020-10-05', 'yyyy-mm-dd')  

(если это то, что 10 и 05 представляет; может быть наоборот. Я не могу сказать, но ты должен)

Комментарии:

1. to_date(‘{run_dt}’,’ГГГГ-ММ-ДД’) как max_upload_date, — вот как я использовал, и это сработало. Спасибо