因为需要批量的导入一批不包括表到数据库中,用手工太繁琐,所以写点程序批量导入,但是这个是单进程的,有想改进的小伙伴可以改成多进程的(可能快很多)
import pymysql from xlrd import xldate_as_tuple import xlrd from datetime import datetime import os, time, random ''' 输入数据库的名字和数据表的名字,然后选择合适的文件夹,之后批量的把文件夹中的excl表中的数据导入到同一个数据表中。 这个需要提前做的工作是:1、提前在数据库中创建数据表,2、再插入的数据的到时候同样需要 填写 需要插入 字段的名字 和 字段的数据类型3、需要插入的文件夹的名字 4、数据库和数据表的名字 ''' def mysql_link(de_name): try: db = pymysql.connect(host="192.168.0.125", user="zhoujianhui", passwd="root", db='test', charset='utf8') return db except: print("could not connect to mysql server") ''' 读取excel函数 args:excel_file(excel文件,目录在py文件同目录) returns:book ''' ''' 执行插入操作 args:db_name(数据库名称) table_name(表名称) excel_file(excel文件名,把文件与py文件放在同一目录下) ''' def store_to(db_name, table_name, Folder_file_total): db = mysql_link(db_name) # 打开数据库连接 cursor = db.cursor() # 使用 cursor() 方法创建一个游标对象 cursor for Folder_file in [a for a, b, c in os.walk(Folder_file_total, topdown=True)][1:]: excel_files = sorted(os.listdir(Folder_file),key=lambda x:int(x[:-5])) excel_files = [Folder_file + '\\' + i for i in excel_files] print(excel_files) for excel_file in excel_files: start = time.time() book = xlrd.open_workbook(excel_file) # 打开excel文件 sheets = book.sheet_names() # 获取所有sheet表名 sh = book.sheet_by_name(sheets[0]) row_num = sh.nrows # 获取行数 print(excel_file) print(row_num) list = [] # 定义列表用来存放数据 for i in range(1, row_num): # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1 row_data = sh.row_values(i) # 按行获取excel的值 row_data[1] = datetime(*xldate_as_tuple(row_data[1], 0)).strftime( '%Y/%m/%d') # 将excl中提取的数字时间格式格式转化成正常的时间格式 value = tuple(row_data) list.append(value) # 将数据暂存在列表 sql = "INSERT INTO " + table_name + "(设备ID,日期,地理城市,运营城市名,区县,网点ID,网点名,设备类型,首次激活时间, 排班值守, 主柜数, 副柜数, 箱格数, 大箱格数, 中箱格数, 小箱格数, 投件量_大箱, 投件量_中箱格, 投件量_小箱格, 取件量_付费取件, 投件量, 投件率_大箱, 投件率_中箱格, 投件率_小箱格, 投件率, 滞留件数量_96小时, 取件免费时长,取件基础费用, 取件基础费用时长, 取件超时续费单价, 取件超时续费周期, 取件费用封顶价格)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" print('准备导入...') cursor.executemany(sql, list) # 执行sql语句 db.commit() # 提交 list.clear() # 清空list end = time.time() print("excl: " + excel_file + " has been inserted " + str(row_num) + " datas!") print("excl: " + excel_file + " has been costed %s s" % (end - start)) print('There is a total %d has been imported %d 个表,Completion degree %d%%' % ( len(excel_files), (excel_files.index(excel_file) + 1), (excel_files.index(excel_file) + 1) * 100 / len(excel_files))) cursor.close() # 关闭连接 db.close() if __name__ == '__main__': first = time.time() store_to('test','设备大表1_2018',r'C:\Users\lenovo\Desktop\设备大表3') last = time.time() print('这件事共用时 %f h'% round((last-first)/3600,2))