分享

利用python把EXCEL文件导入Oracle

 ufo999 2021-09-20
2021-01-28 16:05:10 1点赞

一、数据准备
1、excel数据准备(包含字符串、整数、小数、科学计数法、空值)
在这里插入图片描述
2、oracle建表

CREATE TABLE AM_DC.FXM_TEST (CLO1 VARCHAR2(12), CLO2 NUMBER(8,0), CLO3 NUMBER(36,2), CLO4 NUMBER(36,4),CLO5 VARCHAR2(12));commit;
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

在这里插入图片描述

二、代码


注意:必要时需要先删除数据库中数据再导数入库。

#!/usr/bin/env python# -*- coding: utf-8 -*-import cx_Oracleimport csvimport xlrdimport osimport reclass ImportOracle(object):
    def inoracle(self):
        pass

    def ConnOracle(self):
        conn = cx_Oracle.connect('用户名', '密码', 'ip:端口/服务名')
        cursor = conn.cursor()
        # 给字符数据加上引号
        fields = ['\'' i '\'' for i in self.title]
        # 从第一列数据开始
        fields_str = ', '.join(fields[0:])
        #print(fields_str)
        for i in self.data:
            print(i)
            # 插入引号,确保格式正确
            a=[ '\'' str(b) '\'' for b in i]
            value = ','.join(a[0:])
            # 去掉数据中的[NULL]
            sql = 'insert into %s  values(%s)' % (self.table_name, re.sub('\[Null\] ', '', value))
            # 打印生成的SQL
            print(sql '\n\n\n')
            # 执行SQL语句并提交
            cursor.execute(sql)
            conn.commit()
        # 全部提交后关闭连接,释放游标
        cursor.close()
        conn.close()class ImportOracleCsv(ImportOracle):
    def inoracle(self):
        contents=[]
        with open(self.filename, 'r') as f:
            reader = csv.reader(f)
            # 将科学计数现实的数字显示
            for i in reader:
                contents.append(i)
            # 获取第一行为列名
            title = contents[0]
            # 获取数据,去掉第一行
            data = contents[1:]
        return (title, data)class ImportOracleExcel(ImportOracle):
    def inoracle(self):
        wb = xlrd.open_workbook(self.filename)
        #使用第一个sheet表
        sheet1 = wb.sheet_by_index(0)
        title = sheet1.row_values(0)
        #获取第一行作为表头
        data = [sheet1.row_values(row) for row in range(1, sheet1.nrows)]
        print(data)
        return (title, data)#导入非excel文档报错'Undefine file type'class ImportError(ImportOracle):
    def inoracle(self):
        print('Undefine file type')
        return 0class ChooseFactory(object):
    choose = {}
    choose['csv'] = ImportOracleCsv()
    choose['xlsx'] = ImportOracleExcel()
    choose['xls'] = ImportOracleExcel()

    def choosefile(self, ch):
        if ch in self.choose:
            op = self.choose[ch]
        else:
            op = ImportError()
        return opif __name__ ==  '__main__':
    os.chdir(r'C:\\')#改变当前工作目录到指定的路径
    file_name = 'fxm_test.xlsx'
    table_name = 'fxm_test'
    #获取文件夹类型
    op = file_name.split('.')[-1]
    factory = ChooseFactory()
    cal = factory.choosefile(op)
    cal.filename = file_name    (cal.title, cal.data) = cal.inoracle()
    cal.table_name = table_name
    cal.ConnOracle()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596

三、结果
在这里插入图片描述
四、参考资料
EXCEL文件导入Oracle(python脚本导入)

打开CSDN,阅读体验更佳

相关推荐 更多相似内容

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多