学习到现在,已经需要开始着手写一些小的项目了,但是项目就不适合在博客里每篇文章贴一小段代码。所以,我把项目放到了gitee上,以后关于项目的文章只写项目思路及关键代码。
项目名称:excel_to_oracle
项目地址:https://gitee.com/zjx0711/excel_to_oracle
项目目的:用python实现全自动的把excel格式的数据导入到oracle, 要根据excel的数据自动创建建表语句,并自动把数据插入到数据库,最后把插入错误的数据记录下来。
项目背景:把excel导入到数据库中是工作中经常遇到的一种需求,如果excel文件比较固定,格式比较规范,那么这个工作并不复杂,只需要先把表建好,然后用pl/sql把表导入就可以了。
- 如果数据类型多变,那么每次导入都需要建立新的数据表,这个建表的过程也是比较繁琐的,需要给每一列起一个名字,然后选择一个合适的字段类型。
- 如果excel的数据格式不规范,比如在本应该是数字的列出现了汉字,这时选择一个适合的字段类型也就变得困难,需要查看整列数据后才能确定数据类型。
- pl/sql导入excel时经常出错,并且出错了,也没有详细的错误原因,不得排查。
- 尝试过用pandas 的to_sql来导入到数据库,但还是存在不能正确识别列的数据类型,不能解决中文字段名的各种问题,参见 “pandas DataFrame.to_sql() 用法”
- 尝试用kettle来导入数据库表,发现有一个修改版的kettle可能自动建表,但是这个修改的kellte版本需要付费,并且也不能自动把中文字段转成拼音首字母。
基于以上理由,我决定自己写一个小项目来解决此问题。
项目介绍:
项目目前主要由四个文件组成:
- ExcelColumn.py 一个基于excel列的类,主要用来获取列名(字段名),列的最大长度(字段长度),数据类型
- ExcelSheet.py 一个基于excel工作表的类,主要用来获取工作表的表名,行数,列数,所有字段名
- make_ddl_sql.py 用于创建ddl语句
- make_insert_sql.py 用于创建插入的语句
以后还会创建一个用于执行脚本的模块。
项目亮点:
- 自动判断数据类型。
- 把中文表名转换成拼音首字母的表名,把中文列名转成拼音首字母。
- 自动判断字段长度,在确保能存下最大长度数据的情况下,保留适当冗余。
- 自动导入数据,并记录导入出错的数据。(暂未完成)