一、场景
场景如题,将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中