我有一个字典,其中有键对值,并且我需要将字典写到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
答案 0 :(得分:1)
我认为问题出在这里:
transaction_dt =(datetime.today())。strftime('%Y-%m-%d')
以上输出的返回类型是“字符串”而不是“日期时间”。
(&) :: a -> (a -> b) -> b
无需格式化日期时间并将其作为字符串传递,而将日期时间值直接作为 datatime 类型传递
>> transaction_dt = (datetime.today()).strftime('%Y-%m-%d')
>> print(transaction_dt)
2020-04-14
>> type(transaction_dt)
<class 'str'>
现在让 cx_Oracle 在execute语句中对其进行处理:
>> type(datetime.datetime.now())
<class 'datetime.datetime'>
here有一些很好的解释。