如何在MySQL中执行的一条查询语句结果导出为Excel?
一、可选方法
1、使用sql yog等远程登录,执行查询语句并导出结果集为Excel
适用于较简单的查询结果集的导出
如果需要多个SQL语句的查询结果合并起来导出为一个Excel则操作起来会比较繁琐。
2、使用python连接MySQL执行SQL语句并导出为Excel
操作简单,且可以在脚本中设置好Excel的输出格式。
二、如何使用python将查询结果导出为Excel?
1、python连接MySQL进行查询
若想要使用python连接MySQL,我们必须首先确保python中有[pymysql]这一个模块。(该测试环境为python3)。
1.1 pymysql的安装
打开cmd,使用pip命令进行安装。
# pip install pymysql
1.2 python连接MySQL并执行SQL获取结果集
以下是python连接数据库并获取结果集的最简单的使用方法,目的是让大家可以对最基础的实现函数有个简单的了解。
代码的大致流程是,使用指定账号连接数据库,开启一个游标,执行SQL,获取结果集,关闭游标,关联数据库连接。代码如下:
import pymysql #导入模块 con = pymysql.connect('ip','用户','密码','指定数据库',charset='utf8') #连接数据库
cur = con.cursor() #定义一个游标
cur.execute(sql) #执行SQL,sql为你要执行的SQL语句,如果是简单的SQL语句使用''单引号引起来就好,如果SQL较复杂,可以使用“”双引号代替
result = fetchall() #获取全部查询结果,fetchone()获取结果集的第一个数据
cur.close() #关闭游标
con.close() #关闭数据库连接
1.3 定义一个执行SQL的函数,通过传参的方式将指定参数传入SQL。
可以稍微对SQL的进行一些灵活性的改变,但是限制还是比较大。如:一个SQL查询不同班级的数据,班级的编号可以设置为传参,简化脚本。
当然也可以之间将整个SQL作为一个参数传入函数,以达到
def execude_sql(args): #定义一个执行SQL的函数
con = pymysql.connect('ip','用户','密码','指定数据库',charset='utf8') #连接数据库
cur = con.cursor() #定义一个游标
cur.execute('select id,name from student where class =%s',args) #args即要传入SQL的参数
result = fetchall()
cur.close()
con.close() execude_sql(1024) #调用函数,查询class=1024的id和name 或者
def execude_sql(SQL): #定义一个执行SQL的函数
con = pymysql.connect('ip','用户','密码','指定数据库',charset='utf8') #连接数据库
cur = con.cursor() #定义一个游标
cur.execute(SQL) #执行指定SQL
result = fetchall()
cur.close()
con.close()
execude_sql('select id,name from student where class =1024') #调用函数,查询class=1024的id和name
2、python写入Excel ------ xlwt
2.1 简单的写入数据操作
python写入Excel需要一个模块[xlwt],可想而知还有一个模块可专门用来读取Excel,这个模块较[xlwr],当然,本文重点主要是xlwt的使用。
以下我们通过定义一个写入excel的函数,直接完成SQL的执行以及写入excel,这种情况只能适用于将一整个SQL的查询结果写入excel的,比较简单。但是可能更多的时候我们对于一个excel的设计是一个SQL的查询无法满足的,需要拼接多个SQL的查询结果,如果是这种情况,我们可以先自定义一个SQL的执行函数,然后根据excel的设计来编写excel的写入函数。
以下示例只是简单的表达以下代码所实现的功能:
import xlwt
def wite_to_excel(name):
filename = name + '.xls' #定义Excel名字
wbk = xlwt.Workbook() #实例化一个Excel
sheet1 = wbk.add_sheet('sheet1',cell_overwrite_ok=True) #添加该Excel的第一个sheet,如有需要可依次添加sheet2等
fileds = [u'ID编号',u'名字'] #直接定义结果集的各字段名
execude_sql(1024) #调用函数执行SQL,获取结果集
for filed in range(0,len(fileds)): #写入字段信息
sheet1.write(0,filed,fileds[i])
for row in range(1,len(result)+1): #写入SQL查询数据
for col in range(0,len(fileds))
sheet1.write(row,col,result[row-1][col])
wbk.save(filename) #保存Excel
当然,获取Excel的字段信息也可以直接根据我们SQL语句来自动获取,这时我们就需要在开启执行SQL的游标后添加一条命令 fileds = cur.description即可。
2.2 Excel格式调整
直接导出的数据格式上难免有些参差不齐,我们可以使用xlwt来对Excel输出格式进行适当的调整。
def set_style(name,height,bold=False):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # 'Times New Roman'
font.bold = bold #是否加粗,默认不加粗
font.color_index =
font.height = height #定义字体大小
style.font = font
alignment = xlwt.Alignment() #创建居中
alignment.horz = xlwt.Alignment.HORZ_CENTER #可取值: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
alignment.vert = xlwt.Alignment.VERT_CENTER # 可取值: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
style.alignment = alignment # 文字居中
添加以上格式调整的函数之后,在写入Excel时只需指定相应的格式即可,eg: sheet1.write(0,filed,fileds[i],set_style('宋体','200',True))