запись словаря в таблицу Oracle - PullRequest
1 голос
/ 14 апреля 2020

У меня есть словарь, в котором есть значение пары ключей, и мне нужно записать словарь в таблицу oracle, дата в таблице не позволяет записать значение, которое выдает ошибку.

Код:

Prod_id = '202001_201911_MIT_LZZ'
market_code = 'GT01'

transaction_dt = (datetime.today()).strftime('%Y-%m-%d')
timestamp = "_" + transaction_dt.replace("-", "")

d = {}
d['ALERT_EXTRL_REF_ID'] = [alert_Id]
d['TXN_DT'] = [transaction_dt]
df_load_summary = pd.DataFrame.from_dict(d)

df_load_summary["TXN_DT"] = df_load_summary["TXN_DT"].astype("datetime64[ns]")

write_to_oracle_cmt(df_load_summary,spark,'Table_to_write')

Ошибка при записи в Oracle:

Caused by: java.sql.BatchUpdateException: ORA-00932: inconsistent datatypes: expected DATE got NUMBER

1 Ответ

1 голос
/ 14 апреля 2020

Я думаю, что проблема здесь заключается в следующем:

транзакция_dt = (datetime.today ()). Strftime ('% Y-% m-% d')

Тип возвращаемого результата - «строка», а не «дата / время».

>> transaction_dt = (datetime.today()).strftime('%Y-%m-%d')
>> print(transaction_dt)
2020-04-14
>> type(transaction_dt)
<class 'str'>

Нет необходимости форматировать дату и время в виде строки, передавать значение даты и времени непосредственно как datatime тип:

>> type(datetime.datetime.now())
<class 'datetime.datetime'>

Теперь давайте cx_ Oracle обработать это в операторе execute:

cursor.execute("INSERT INTO table VALUES(:my_date)", {'my_date': datetime.datetime.now()})

Здесь есть хорошее объяснение здесь .

...