python脚本上传本地Excel到Oracle

        今天有同事问我怎么用python将本地Excel文件上传到Oracle,不会做这个的同事还蛮多的,下面的代码是很久以前在网上找的,需要的朋友可以借鉴一下
        这个脚本只需要调整文件的名称、路径、库名.表名以及链接信息(下面已经注释),使用时要注意文件字段的个数、顺序需要和数据库一致


# encoding=gbk
import cx_Oracle
import csv
import xlrd
import os
import re

class ImportOracle(object):
    def inoracle(self):
        pass

    def ConnOracle(self):
        #Oracle连接信息
        conn = cx_Oracle.connect('SYSTEM/admin@XX.XX.XX.XX/orcl')
        cursor = conn.cursor()
        # 给字符数据加上引号
        fields = ['\''+i+'\'' for i in self.title]
        # 从第一列的数据加载
        fields_str = ', '.join(fields[0:])
        for i in self.data:
            # 插入引号,确保格式正确
            a=[ '\''+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)]
        return (title, data)

#导入非excel文档报错'Undefine file type'
class ImportError(ImportOracle):
    def inoracle(self):
        print('Undefine file type')
        return 0


class 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 op


if __name__ ==  "__main__":
    #文件路径
    os.chdir(r'C:\Users\liuhu\Desktop')
    #本地的文件名
    file_name = '行政组织数据-20220117.csv'
    #输入想要插入的库名.表名
    table_name = 'BI.XZJG_DATA_I_W'
    #获取文件夹类型
    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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值