Python 实现MySQL数据导入Excel

版权声明:本文为博主原创文章,转载请注明出处 浅然的专栏 https://blog.csdn.net/w_linux/article/details/83755339

一、场景

场景如题,将mysql中的表数据导入到excel


二、场景实现

1、创建mysql_util.py

将对mysql的操作写在这个py文件下

mysql_conf = {
    'host': '主机host',
    'user': '用户名',
    'password': '密码',
    'port': 端口,
    'database': '库名',
    'charset': 'utf8'
}

class MySQLUtil:
    def __init__(self, conf):
        logging.basicConfig(level=logging.DEBUG,
                            format='[%(asctime)s] %(levelname)s [%(funcName)s: %(filename)s, %(lineno)d] %(message)s',
                            datefmt='%Y-%m-%d %H:%M:%S')
        self.conn = pymysql.connect(**conf)
        self.cursor = self.conn.cursor()

    # 获取游标
    def get_cur(self):
        return self.cursor

    # 事务提交
    def commit(self):
        self.conn.commit()

    # 关闭连接
    def close(self):
        self.conn.close()

    #关闭游标
    def curclose(self):
        self.cursor.close()

    # 回滚事务
    def rollback(self):
        self.conn.rollback()
    '''
        数据导入excel的查询操作
    '''
    def queryOperationExcel(self,sql,flag):
        # 获取数据库游标
        cur = self.get_cur()
        # 执行查询
        try:
            cur.execute(sql)
            #移动游标位置
            cur.scroll(0,mode="absolute")
            # 查询结果条数
            # row = cur.rowcount
            # 查询结果集
            #flag等于1:查询结果集
            #flag等于2:查询表结构描述
            if flag==1:
                dataList = cur.fetchall()
            elif flag==0:
                dataList = cur.description
        except Exception as e:
            logging.error('查询结果集异常{0}'.format(e))
        # 关闭游标
        # cur.close()
        # 关闭数据连接
        # self.close()
        # 返回查询结果集
        logging.info('{}'.format(dataList))
        return dataList
    '''
    查询mysql数据 将mysql表数据导入到excel
    '''
    def getmysqldata(self,tablename,flag):
        sql = "SELECT * FROM {0}".format(tablename)
        try:
            logging.info('{}'.format(sql))
            data = self.queryOperationExcel(sql,flag)
        except Exception as e:
            logging.error('{}'.format(e))
        else:
            logging.info('获取excel数据成功:{}'.format(data))
            return data

2、创建excelutils.py

实现具体导入excel逻辑

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : linjie
# @Des     : py将MySQL数据导出到excel
import logging
import mysql_util as mysql_util
import xlwt
from util import mysql_util
from util.mysql_util import MySQLUtil
class ExcelUtils:
# 日志配置
    logging.basicConfig(level=logging.DEBUG,
                        format='[%(asctime)s] %(levelname)s [%(funcName)s: %(filename)s, %(lineno)d] %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    '''
    mysql数据导入excel
    sheet_name:excel excel名称
    dbname:数据库名
    tablename:表名
    out_path:文件存放路径
    flag1:数据表结果集查询标志
    flag2:数据表描述查询标志
    '''
    def mysql_to_excel(self,sheet_name,tablename,out_path,flag1=1,flag2=0):
        mysqldb = MySQLUtil(mysql_util.mysql_conf)
        #结果集
        datalist = mysqldb.getmysqldata(tablename,flag1)
        logging.info('结果集:{}'.format(datalist))
        #表描述
        tabledesc = mysqldb.getmysqldata(tablename,flag2)
        logging.info('表描述:{}'.format(tabledesc))
        #创建excel
        workbook = xlwt.Workbook()
        #创建excel中的sheet
        sheet = workbook.add_sheet(sheet_name,cell_overwrite_ok=True)
        
        #插入表描述到excel
        for desc in range(0,len(tabledesc)):
            sheet.write(0,desc,tabledesc[desc][0])
        row = 1
        col = 0
        #插入数据到excel
        for row in range(1,len(datalist)+1):
            for col in range(0,len(tabledesc)):
                sheet.write(row,col,u'%s'%datalist[row-1][col])
        try:
            #保存excel
            workbook.save(out_path)
        except Exception as e:
            logging.error('导出数据到excel失败:{}'.format(e))
        else:
            logging.info('导出成功')
            #数据库连接关闭二连
            mysqldb.curclose()
            mysqldb.close()

if __name__ == '__main__':
    mysql_excel = ExcelUtils()
    mysql_excel.mysql_to_excel('build','ms_commsum','test.xls')

ok,数据即可导入到excel中

猜你喜欢

转载自blog.csdn.net/w_linux/article/details/83755339
今日推荐