将字典写入 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。
我有一个字典,其中有密钥对值,我需要将字典写入 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。