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打造出适合自己的定制化Eclipse IDE
Mar 02 Python
Python全局变量用法实例分析
Jul 19 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
将python代码和注释分离的方法
Apr 21 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
简单了解Python生成器是什么
Jul 02 Python
pandas的相关系数与协方差实例
Dec 27 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
Python sorted对list和dict排序
Jun 09 Python
PyMongo 查询数据的实现
Jun 28 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 获取select下拉列表框的值
2010/05/08 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
DOM 事件流详解
2015/01/20 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
环保建议书范文
2015/09/14 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL