前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python批量Excel文件数据导入SQLite数据库的优化方案

Python批量Excel文件数据导入SQLite数据库的优化方案

作者头像
Python小屋屋主
发布2018-04-17 11:03:00
2K0
发布2018-04-17 11:03:00
举报
文章被收录于专栏:Python小屋Python小屋

说明:1)需要安装扩展库openpyxl;2)随着数据库的增大,导入速度可能会有所下降;3)本文只考虑Python代码优化,没有涉及数据库的优化;4)本文要点在于使用executemany实现批量数据导入,通过减少事务提交次数提高导入速度。

from random import choice, randrange from string import digits, ascii_letters from os import listdir import sqlite3 from time import time from openpyxl import Workbook, load_workbook

def generateRandomData(): #total表示记录总条数 global total characters = digits+ascii_letters for i in range(50): xlsName = 'xlsxs\\'+str(i)+'.xlsx' #随机数,每个xlsx文件的行数不一样 totalLines = randrange(10**5) wb = Workbook() ws = wb.worksheets[0] #表头 ws.append(['a', 'b', 'c', 'd', 'e']) #随机数据,每行5个字段,每个字段30个字符 for j in range(totalLines): line = [''.join((choice(characters) for ii in range(30))) for jj in range(5)] ws.append(line) total += 1 #保存xlsx文件 wb.save(xlsName)

#针对每个xlsx文件的生成器 def eachXlsx(xlsxFn): wb = load_workbook(xlsxFn) ws = wb.worksheets[0] for index, row in enumerate(ws.rows): #忽略表头 if index == 0: continue yield tuple(map(lambda x:x.value, row))

#导入 def xlsx2sqlite(): #获取所有xlsx文件 xlsxs = ('xlsxs\\'+fn for fn in listdir('xlsxs')) #连接数据库,创建游标 conn = sqlite3.connect('data.db') cur = conn.cursor() for xlsx in xlsxs: #批量导入,减少提交事务的次数,可以提高速度 sql = 'insert into fromxlsx values(?,?,?,?,?)' cur.executemany(sql, eachXlsx(xlsx)) conn.commit()

total = 0

generateRandomData()

start = time() xlsx2sqlite() delta = time()-start print('导入用时:', delta) print('导入速度(条/秒):', total/delta)

运行结果:

导入用时: 326.4754948616028 导入速度(条/秒): 7105.5317673486825

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档