Excel数据上传数据库(Oracle)

Excel数据上传数据库(Oracle)

使用Python 将Excel数据批量上传至数据库
1.Excel 路径:C:/Excel/
ps:Excel Title应一致,所处sheet名应一致
2.代码:

import sys
import os
import cx_Oracle
import xlrd
from xlrd import xldate_as_tuple
from datetime import datetime as datetime1
import threading
import time
import datetime
import PyLog
import logging
import codecs
import xlsxwriter
import openpyxl
import pandas
import shutil

#获取文件夹下Excel
for f in os.listdir("C:/Excel/"):
    print(f)
    try:
    	#打开Excel
        data = xlrd.open_workbook('C:/Excel/'+ f)
        #获取Excel数据 
        excel = data.sheet_by_name('Sheet1')
        #连接Oracle 数据库
        host = "**.**.***.***"
        port = "****"
        sid = "******"
        oracleStr = cx_Oracle.makedsn(host, port, sid)

        if (excel.ncols) < 1:
            raise Exception("Excel has no data")
        logging.debug("[READ] OPEN EXCEL start time:%s " % time.ctime(time.time()))

        row = []

        row = [('' for i in range(excel.ncols)) for j in range(excel.nrows-1)]

        for i in range(excel.nrows):
            if (i==0):
                row[0] = tuple(excel.row_values(i), )
            if not (i==0):
                row[i-1] = tuple(excel.row_values(i),)

        print("[READ] OPEN EXCEL End time:%s " % time.ctime(time.time()))
        logging.debug("[READ] OPEN EXCEL End time:%s " % time.ctime(time.time()))
        print("="*10,"SHEET1共計",excel.nrows-1,"筆","="*10)


        #======================================

        oracleConn = cx_Oracle.connect("账号", "密码", oracleStr)
        cur = oracleConn.cursor()

        if [row]:
            for i in range(excel.nrows-1):
                tmp = (datetime.datetime.now(),)
                date = (datetime1(*xldate_as_tuple(float(row[i][7]), 0)),)
                row[i] = row[i] + tmp + date
            logging.debug("START insert DB TIME:%s" % time.ctime(time.time()))
            cur.executemany("INSERT INTO TableName(栏位1,栏位2,栏位3,栏位4,栏位5) VALUES (:1,:2,:3,:4,:5)",row[0:])
            logging.debug("END insert DB TIME:%s" % time.ctime(time.time()))
            print("END insert DB TIME:%s" % time.ctime(time.time()))
            #存入后可移动或删除
            shutil.move("C:/Excel/" + f, "C:/Excel/历史上传/")
            print("MOVE OK!")


        if not row:
            print(" no data")
            logging.debug(" no data")
        oracleConn.commit()
        cur.close()
        oracleConn.close()
        print("[INSERT_WO]  END ")

        logging.debug("END :%s time: %s " % (time.ctime(time.time())))
        print("END :%s time: %s " % (time.ctime(time.time())))
    #如果某个Excel 数据格式错误则跳过
    except (Exception) as errorHandle:
        print("ERROR :", errorHandle)
        logging.debug("ERROR :", errorHandle)
        pass
    else:
        print("no error")

以上,不懂可留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值