Python实现将数据库一键导出为Excel表格的实例


Posted in Python onDecember 30, 2016

数据库数据导出为excel表格,也可以说是一个很常用的功能了。毕竟不是任何人都懂数据库操作语句的。

下面先来看看完成的效果吧。

数据源

Python实现将数据库一键导出为Excel表格的实例

导出结果

Python实现将数据库一键导出为Excel表格的实例

依赖

由于是Python实现的,所以需要有Python环境的支持

Python2.7.11

我的Python环境是2.7.11。虽然你用的可能是3.5版本,但是思想是一致的。

xlwt
pip install xlwt

MySQLdb
pip install MySQLdb

如果上述方式不成功的话,可以到sourceforge官网上去下载windows上的msi版本或者使用源码自行编译。

数据库相关

本次试验,数据库相关的其实也就是如何使用Python操作数据库而已,知识点也很少,下述为我们本次用到的一些简单的语句。

连接

conn = MySQLdb.connect(host='localhost',user='root',passwd='mysql',db='test',charset='utf8')

这里值得我们一提的就是最后一个参数的使用,不然从数据库中取出的数据就会使乱码。关于乱码问题,如果还有不明白的地方,不妨看下这篇文章 浅谈编码,解码,乱码的问题

获取字段信息

fields = cursor.description

至于cursor,是我们操作数据库的核心。游标的特点就是一旦遍历过该条数据,便不可返回。但是我们也可以手动的改变其位置。

cursor.scroll(0,mode='absolute')来重置游标的位置

获取数据

获取数据简直更是轻而易举,但是我们必须在心里明白,数据项是一个类似于二维数组的存在。我们获取每一个cell项的时候应该注意。

results = cursor.fetchall()

Excel基础

同样,这里讲解的也是如何使用Python来操作excel数据。

workbook

工作薄的概念我们必须要明确,其是我们工作的基础。与下文的sheet相对应,workbook是sheet赖以生存的载体。

workbook = xlwt.Workbook()

sheet

我们所有的操作,都是在sheet上进行的。

sheet = workbook.add_sheet(‘table_message',cell_overwrite_ok=True)

对于workbook 和sheet,如果对此有点模糊。不妨这样进行假设。

日常生活中记账的时候,我们都会有一个账本,这就是workbook。而我们记账则是记录在一张张的表格上面,这些表格就是我们看到的sheet。一个账本上可以有很多个表格,也可以只是一个表格。这样就很容易理解了吧。 :-)

案例

下面看一个小案例。

# coding:utf8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/8/20'
# __Desc__ = 从数据库中导出数据到excel数据表中

import xlwt
import MySQLdb

conn = MySQLdb.connect('localhost','root','mysql','test',charset='utf8')
cursor = conn.cursor()

count = cursor.execute('select * from message')
print count
# 重置游标的位置
cursor.scroll(0,mode='absolute')
# 搜取所有结果
results = cursor.fetchall()

# 获取MYSQL里面的数据字段名称
fields = cursor.description
workbook = xlwt.Workbook()
sheet = workbook.add_sheet('table_message',cell_overwrite_ok=True)

# 写上字段信息
for field in range(0,len(fields)):
 sheet.write(0,field,fields[field][0])

# 获取并写入数据段信息
row = 1
col = 0
for row in range(1,len(results)+1):
 for col in range(0,len(fields)):
  sheet.write(row,col,u'%s'%results[row-1][col])

workbook.save(r'./readout.xlsx')

封装

为了使用上的方便,现将其封装成一个容易调用的函数。

封装之后

# coding:utf8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/8/20'
# __Desc__ = 从数据库中导出数据到excel数据表中

import xlwt
import MySQLdb

def export(host,user,password,dbname,table_name,outputpath):
 conn = MySQLdb.connect(host,user,password,dbname,charset='utf8')
 cursor = conn.cursor()

 count = cursor.execute('select * from '+table_name)
 print count
 # 重置游标的位置
 cursor.scroll(0,mode='absolute')
 # 搜取所有结果
 results = cursor.fetchall()

 # 获取MYSQL里面的数据字段名称
 fields = cursor.description
 workbook = xlwt.Workbook()
 sheet = workbook.add_sheet('table_'+table_name,cell_overwrite_ok=True)

 # 写上字段信息
 for field in range(0,len(fields)):
  sheet.write(0,field,fields[field][0])

 # 获取并写入数据段信息
 row = 1
 col = 0
 for row in range(1,len(results)+1):
  for col in range(0,len(fields)):
   sheet.write(row,col,u'%s'%results[row-1][col])

 workbook.save(outputpath)


# 结果测试
if __name__ == "__main__":
 export('localhost','root','mysql','test','datetest',r'datetest.xlsx')

测试结果

id name date
1 dlut 2016-07-06
2 清华大学 2016-07-03
3 北京大学 2016-07-28
4 Mark 2016-08-20
5 Tom 2016-08-19
6 Jane 2016-08-21

总结

回顾一下,本次试验用到了哪些知识点。

•Python简易操作数据库
•Python简易操作Excel
•数据库取出数据乱码问题解决之添加charset=utf-8
•以二维数组的角度来处理获取到的结果集。

以上这篇Python实现将数据库一键导出为Excel表格的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
Python爬豆瓣电影实例
Feb 23 Python
Python中偏函数用法示例
Jun 07 Python
linux下python中文乱码解决方案详解
Aug 28 Python
Python实现Restful API的例子
Aug 31 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
pandas求平均数和中位数的方法实例
Aug 04 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 #Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 #Python
python实现按任意键继续执行程序
Dec 30 #Python
详解python3实现的web端json通信协议
Dec 29 #Python
Python正则表达式如何进行字符串替换实例
Dec 28 #Python
Python写的一个定时重跑获取数据库数据
Dec 28 #Python
Python 实现文件的全备份和差异备份详解
Dec 27 #Python
You might like
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
PHP反射学习入门示例
2019/06/14 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
js实现简单的倒计时
2021/01/28 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python简单进程锁代码实例
2015/04/27 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
亿企通软件测试面试题
2012/04/10 面试题
护士长竞聘书
2014/03/31 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
小学教师教学反思
2016/02/24 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
Nginx 常用配置
2022/05/15 Servers
一文搞懂Java中的注解和反射
2022/06/21 Java/Android