zoukankan      html  css  js  c++  java
  • Python DataFrame to_sql方法插入日期或时间类型的数据时 报ORA-01861 文字与字符串不匹配 的解决方法

    业务团队近期提出一个需求:

    希望在接口调用之前先批量插入Excel中的数据作为数据预置

    这个需求以前已经开发完成 本来以为可以很快调试完毕

    没成想遭遇一个难关

    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)
            try:
                # 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)
    

      特此记录一下,以便下次遇到可以快速解决

  • 相关阅读:
    websocket以及它的内部原理
    服务端向客户端推送消息的几种方式,基于ajax,队列以及异常处理实现简易版本的群聊功能(长轮询)
    分布式爬虫以及语言介绍
    去重以及布隆过滤器
    下载中间件,selenium集成
    【商城应用】商品运费流程设计
    引用本地jar包记得加扫描路径(注意重复bean)
    乐观锁悲观锁场景
    Linux时区
    JsonObject常用转换
  • 原文地址:https://www.cnblogs.com/QianyuQian/p/15428091.html
Copyright © 2011-2022 走看看