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使用Phantomjs截屏网页的方法
May 17 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
python使用PyQt5的简单方法
Feb 27 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
python web框架 django wsgi原理解析
Aug 20 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
Django后台管理系统的图文使用教学
Jan 20 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python实现A*寻路算法
Jun 13 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python psutil模块使用方法解析
2019/08/01 Python
python常用排序算法的实现代码
2019/11/08 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
如何掌握自荐信格式呢
2013/11/19 职场文书
5.1手机促销活动
2014/01/17 职场文书
党员公开承诺书范文
2014/03/25 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang