这个需求以前已经开发完成 本来以为可以很快调试完毕
没成想遭遇一个难关
DataFrame.to_sql方法在执行过程中报ORA-01861 文字与字符串不匹配(着急解决问题,并没有来得及截图)
搞了一个下午+睡前一小时+今天上午一小时
终于弄清楚原因
业务方提供的数据格式不正确
看起来像是日期没有问题,但是是左对齐的日期,python会将其作为文本来处理
截图如下:
另外在dtype字段也做了简单处理
代码如下:
def mapping_df_types(self,df):
dtypedict = {}
for i, j in zip(df.columns, df.dtypes):
print("df.columns的值为{}".format(i))
print("df.dtypes的值为{}".format(j))
if "date" in str(i).lower(): # 2021/10/19调试:解决ORA-01861文字与格式字符串不匹配的问题
dtypedict.update({i: DATE})
if "object" in str(j):
if "time" in str(i).lower():
dtypedict.update({i: DATE})
else:
dtypedict.update({i: VARCHAR(256)})
if "float" in str(j):
dtypedict.update({i: NUMBER(19,8)})
# if "datetime64[ns]" in str(j):
# dtypedict.update({i:DATE})
# if "int" in str(j):
# dtypedict.update({i:VARCHAR(19)})
# print(dtypedict)
return dtypedict
def put_df_toOracle(self, tableName, dbaddr):
df = self.get_DataFrame()
engine = create_engine(dbaddr, encoding='utf-8', echo=True)
dtypedict = self.mapping_df_types(df)
# 20210415增加schema参数,待验证,excel中表名需要删除schema.(info.)
df.to_sql(tableName, engine, schema=self.schema_name, index=False, if_exists='append', dtype=dtypedict, chunksize=None)
except Exception as e:
print(e)
特此记录一下,以便下次遇到可以快速解决