EXCEL文件导入Oracle(python脚本导入)

直接上代码

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

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

    def ConnOracle(self):
        conn = cx_Oracle.connect('user/password@orcl')
        cursor = conn.cursor()
        # 给字符数据加上引号
        fields = ['\''+i+'\'' for i in self.title]
        # 不取第一列的数据
        fields_str = ', '.join(fields[1:])
        for i in self.data:
            # 插入引号,确保格式正确
            a=[ '\''+b+'\'' for b in i]
            value = ','.join(a[1:])
            # 去掉数据中的[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:\')
    file_name = 'wenjian.csv'
    table_name = 'tc1'
    #获取文件夹类型
    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()

中间SQL脚本输出结果:

EXCEL文件导入Oracle(python脚本导入)_第1张图片

你可能感兴趣的:(数据库,oracle,python,excel,oracle,数据库,csv,python)