将字典写入 Oracle table

writing a Dictionary into a Oracle table

我有一个字典,其中有密钥对值,我需要将字典写入 oracle table,table 中的日期不允许写入它抛出的值错误。

代码:

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

我认为问题出在这里:

transaction_dt = (datetime.today()).strftime('%Y-%m-%d')

上面输出的return类型是"string"不是"datetime"。

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

无需格式化datetime,将其作为字符串传递,直接将datetime值传递为datatime type:

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

现在让cx_Oracle在执行语句中处理它:

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

有一些很好的解释here