关闭

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

标签: 数据库pythonexcel数据库一键导出
27087人阅读 评论(15) 收藏 举报
分类:

数据库数据导出为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’)

这里值得我们一提的就是最后一个参数的使用,不然从数据库中取出的数据就会使乱码。关于乱码问题,如果还有不明白的地方,不妨看下这篇文章http://blog.csdn.net/marksinoberg/article/details/52254401

获取字段信息

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
  • 以二维数组的角度来处理获取到的结果集。
8
0
查看评论

如何使用python将大量数据导出到Excel中的小技巧

如何使用python将大量数据导出到Excel中的小技巧 python Excel相关的操作的module lib有两组,一组是xlrd、xlwt、xlutils,另一组是openpyxl, 但是前一组(xlrd,xlwt)比较老,只能处理由Excel 97-2003 或者Excel 97 以前版本...
  • helloxiaozhe
  • helloxiaozhe
  • 2017-09-05 12:24
  • 5577

python实现数据导出到excel--普通格式

python实现数据导出到excel–普通格式 此文是在django框架下编写,从数据库中获取数据使用的是django-orm 用python导出数据到excel,简单到爆!(普通的excel格式)安装xlwtpip install xlwt编写py文件from xlwt import * im...
  • apple9005
  • apple9005
  • 2017-01-14 17:13
  • 5923

python导出excel

import xlwt from xlwt import * import StringIO book = Workbook(encoding='utf-8') sheet = book.add_sheet('Sheet1'...
  • qq_32502511
  • qq_32502511
  • 2016-10-31 10:23
  • 341

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

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载时请标注http://blog.csdn.net/marksinoberg. 目录(?)[+] 依赖 Python2711xlwtMySQLdb 数据库相关 ...
  • houdaiye
  • houdaiye
  • 2016-09-01 15:00
  • 839

python导出excel常用格式样式设置

# encoding:utf-8 import xlwt from xlwt import * book = Workbook(encoding='utf-8') sheet = book.add_sheet('Sheet1') #创建一个sheet #-----样...
  • qq_32502511
  • qq_32502511
  • 2016-12-05 11:38
  • 2633

Python 导出mysql数据到excel

环境  : win7 64 位+ python 3.4 需要俩个库 # 创建兼容微软 Excel 97/2000/XP/2003的电子表格(.XLS)文件 xlwt # mysql 接口 MySQL-python/MySQLdb 安装(解压文件,进入下载目...
  • kk185800961
  • kk185800961
  • 2016-12-29 09:45
  • 1846

python前端生成excel

#前端html: 导出1 ************************************************************************************************* 前端js: $scope.date_from="2013...
  • wanghuafengc
  • wanghuafengc
  • 2013-12-13 10:49
  • 1270

简单Python脚本实现数据导出Excel格式的尝试

实习期间,服务器的一位师兄让我帮忙整理一下服务器的log数据,最终我用Python实现了数据的提取并将其用Excel格式导出。下面是我Python实现的源码,可以自动遍历某一文件目录下的所有文本文件,并将总的数据导出到Excel文件中,导出为Excel格式这样就比较方便统计了。   ...
  • YearnedSun
  • YearnedSun
  • 2016-04-21 16:53
  • 2718

python3实现mysql导出excel

一、准备工作1.1win7下Python工具库安装xlwt和xlrd的安装1.1.1方法一:下载安装1、从http://pypi.python.org/pypi/xlwt 下载 xlwt-1.0.0.tar.gz; 2、从http://pypi.python.org/pypi/xlrd下载 xl...
  • tingzuhuitou
  • tingzuhuitou
  • 2017-12-08 10:53
  • 172

python 读取txt中每行数据,并且保存到excel中

使用xlwt读取txt文件内容,并且写入到excel中,代码如下,已经加了注释,代码简单,具体代码如下: # coding=utf-8 ''' main function:主要实现把txt中的每行数据写入到excel中 ''' #########...
  • momaojia
  • momaojia
  • 2017-03-23 19:35
  • 5035
    个人资料
    • 访问:3239274次
    • 积分:34877
    • 等级:
    • 排名:第148名
    • 原创:357篇
    • 转载:35篇
    • 译文:9篇
    • 评论:734条
    友情链接
    我的偶像
    个人主页
      GitHub
    放松一下
    博客专栏
    最新评论
    版权信息
    去除本页广告
    图片炸弹装填中...

        
    [img=赞一个]http://bpic.588ku.com/element_origin_min_pic/16/12/12/0d96da96cf36505736c09d63832eaac8.jpg[/img]