每日10行代码151:用python把excel自动导入到oracle

学习到现在,已经需要开始着手写一些小的项目了,但是项目就不适合在博客里每篇文章贴一小段代码。所以,我把项目放到了gitee上,以后关于项目的文章只写项目思路及关键代码。
项目名称:excel_to_oracle
项目地址https://gitee.com/zjx0711/excel_to_oracle
项目目的:用python实现全自动的把excel格式的数据导入到oracle, 要根据excel的数据自动创建建表语句,并自动把数据插入到数据库,最后把插入错误的数据记录下来。
项目背景:把excel导入到数据库中是工作中经常遇到的一种需求,如果excel文件比较固定,格式比较规范,那么这个工作并不复杂,只需要先把表建好,然后用pl/sql把表导入就可以了。

  1. 如果数据类型多变,那么每次导入都需要建立新的数据表,这个建表的过程也是比较繁琐的,需要给每一列起一个名字,然后选择一个合适的字段类型。
  2. 如果excel的数据格式不规范,比如在本应该是数字的列出现了汉字,这时选择一个适合的字段类型也就变得困难,需要查看整列数据后才能确定数据类型。
  3. pl/sql导入excel时经常出错,并且出错了,也没有详细的错误原因,不得排查。
  4. 尝试过用pandas 的to_sql来导入到数据库,但还是存在不能正确识别列的数据类型,不能解决中文字段名的各种问题,参见 “pandas DataFrame.to_sql() 用法
  5. 尝试用kettle来导入数据库表,发现有一个修改版的kettle可能自动建表,但是这个修改的kellte版本需要付费,并且也不能自动把中文字段转成拼音首字母。
    基于以上理由,我决定自己写一个小项目来解决此问题。

项目介绍
项目目前主要由四个文件组成:

  • ExcelColumn.py 一个基于excel列的类,主要用来获取列名(字段名),列的最大长度(字段长度),数据类型
  • ExcelSheet.py 一个基于excel工作表的类,主要用来获取工作表的表名,行数,列数,所有字段名
  • make_ddl_sql.py 用于创建ddl语句
  • make_insert_sql.py 用于创建插入的语句

以后还会创建一个用于执行脚本的模块。
项目亮点

  1. 自动判断数据类型。
  2. 把中文表名转换成拼音首字母的表名,把中文列名转成拼音首字母。
  3. 自动判断字段长度,在确保能存下最大长度数据的情况下,保留适当冗余。
  4. 自动导入数据,并记录导入出错的数据。(暂未完成)
上一篇:学习day16


下一篇:MacOS Monterey 使用 bizhub C308 打印PDF 出现了:offending command: binary token type 151 错误