利用Python3 连接mysql 导出数据为excel格式

2018-07-09  本文已影响0人  SpaceNote

背景

最近在工作中,遇到每隔一段时间都要跑一次数据校验。大概有15个sql语句,需要将这15个sql语句查询的记录导出并且存为excel格式。
才开始觉得sql每次都是固定不变,总量也不多,就通过 MySQL workbench 一条一条查询导出为 *.csv文件,但是发现 *.csv文件直接打开会出现中文乱码,就需要转码,我就通过Notepad++ 打开csv文件,设置文件格式 utf-8 bom 编码。这一系列步骤下来。人都不好了。
后面自己受不了了,就想通过脚本来解决这个重复性工作。我是一个Java开发者,就准备用Java来实现这个工作,但是后面发现Java来解决这个问题,有点太麻烦了,需要连接MySQL,查询数据,通过poi遍历做成poi对应excel的hssfworkbook对象(或者xssfworkbook),然后通过io流输出成excel文件。想到这些,就直接放弃了用Java来实现这个工作了。
后面想到了Python,我对Python不熟。就在网上查找了一些资料,发现还是满简单的了。就这样决定用Python来实现了。

具体实现

下面是Python的具体实现代码:

# coding:utf8
import sys
import xlwt
#import MySQLdb
import pymysql as MySQLdb
import datetime

def get_conn_mysql():
    conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='root', db='test', charset='utf8')
    return conn
def query_data(cur, sql, args):
    cur.execute(sql, args)
    return cur.fetchall()

# out_path 保存的路径, sql: 需要执行的语句
def read_mysql_to_excel(out_path, sql):
    conn = get_conn_mysql()
    cursor = conn.cursor()
    count = cursor.execute(sql)
    if count != 0:
        print(count)
        cursor.scroll(0, mode='absolute')
        results = cursor.fetchall()
        fields = cursor.description
        workbook = xlwt.Workbook()
        sheet = workbook.add_sheet('building', 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)):
                if results[row-1][col] != None:
                    sheet.write(row, col, u'%s'%results[row-1][col])
                else:
                    val = ''
                    sheet.write(row, col, u'%s'%val)
        workbook.save(out_path)
if __name__ == '__main__':
    # 执行的sql语句
    sql = 'select * from sys_user'
    read_mysql_to_excel('1.xls', sql)

参考资料:https://blog.csdn.net/tingzuhuitou/article/details/78749185

文章来源:http://www.myluffy.com/2018/07/python3-link-mysql-export

上一篇下一篇

猜你喜欢

热点阅读