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

说明: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

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-02-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

★Kali信息收集~★7.FPing :ip段扫描

参数: ? 使用方法: fping [选项] [目标...] -a显示是活着的目标 -A 显示目标地址 -b n 大量 ping 数据要发送,以字节为单位 ...

4066
来自专栏windealli

浅谈协程

如果了解一些操作系统的相关知识的话,我们应该知道:进程是资源分配的最小单位,线程是CPU调度的最小单位。

49919
来自专栏互联网杂技

利用机器学习把草图自动生成HTML

项目地址 https://github.com/ashnkumar/sketch-code 可以先clone到本地

1582
来自专栏DannyHoo的专栏

记录用户的登录状态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1712
来自专栏磨磨谈

Ceph部署的时候修改默认权重

部署集群的时候权重是默认生成的,这个是根据磁盘大小分配的,我们有的时候需要去修改一下这个默认权重

621
来自专栏CreateAMind

ls-gan bedroom数据集 pretrain model 和代码

pretrain model 和代码 https://pan.baidu.com/s/1dFbzjlZ pretrain 下载

1082
来自专栏电光石火

maven-source-plugin 自动将源码打包并发布

1843
来自专栏跟着阿笨一起玩NET

VS2010有自带的数据对比功能

在这里需要注意的有两点:第一、在目标数据库中表如果有非空字段,而在源数据库中某个字段的值为空,则同步不会成功(简单点说如果目标数据库中的表有一个字段设置为不允许...

1012
来自专栏Hongten

python开发_platform_获取操作系统详细信息工具

=======================================================

1012
来自专栏算法channel

完整教程:使用caffe测试mnist数据集

想要入门深度学习没有几个趁手的兵器是不行的,目前流行的框架tensorflow、pytorch、caffe等,笔者也是最近接触了caffe,发现caffe非常适...

1526

扫码关注云+社区

领取腾讯云代金券