如何在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))

如何使用python将MySQL中的查询结果导出为Excel----xlwt的使用的更多相关文章

  1. python 3 mysql sql逻辑查询语句执行顺序

    python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...

  2. python 3 mysql 单表查询

    python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...

  3. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  4. 【原创】7. MYSQL++中的查询结果获取(各种Result类型)

    在本节中,我将首先介绍MYSQL++中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释. 1. MYSQL++ ...

  5. mysql中如何查询最近24小时、top n查询

    MySQL中如何查询最近24小时. where visittime >= NOW() - interval 1 hour; 昨天. where visittime between CURDATE ...

  6. Mysql中分页查询两个方法比较

    mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1;   SELECT a FROM ...

  7. 解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...

  8. mysql中in查询中排序

    mysql中in查询条件的时候,很多时候排序是不规则的,如何按照in里面的条件进行排序呢? mysql中给出了办法,在in后面加order by field,order by field的首个条件是按 ...

  9. mysql 中合并查询结果union用法 or、in与union all 的查询效率

    mysql 中合并查询结果union用法 or.in与union all 的查询效率 (2016-05-09 11:18:23) 转载▼ 标签: mysql union or in 分类: mysql ...

随机推荐

  1. Tracker-store

    升级后发现有个tracker-store占用cpu非常厉害,查了下,好像是GNOME 3使用 Documents 來整合 本机 以及 在线(Google / Twitter)账户的文件,这个功能会呼叫 ...

  2. 项目总结一:响应式之CSS3 媒体查询

    1.<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scala ...

  3. ALV添加文字输入框

    一.业务场景 在合同打印中,需要临时添加其他约定事项,在打印程序的ALV中添加其他事项字段,点击之后弹出文字输入窗口,点击确定,文字内容存表,并在ALV中展示,点击打印后,文字内容加载到smartfo ...

  4. Java的继承、封装与多态

    Java的继承.封装与多态 基本概念 面向对象OO(Object Oriented):把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象. 对同类对象抽象出共性,即类. 比如人就是一个类 ...

  5. SQL2008清空删除日志:

    SQL2008清空删除日志: '在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. USE [master] GO ALTER DATABASE DNName SET ...

  6. iOS之 git 简单使用

    之前没有用过git管理代码, 现在 公司要求使用git,咱 就 记记 今天所学的东西.以后也好方便查阅 和补充. 首先 我描述一下我今天提交代码的情况. 同伴给了我一个 从git库下来的2个项目的包. ...

  7. Java中的的画正三角方法

    在循环的语句的练习中,画正三角是一个很经典的例子,但是如果方法找的不对的话,即使最终画出来了,那么得到的代码也是非常的复杂,应用性不高. 下面有两种方法来画正三角,第一种是一种比较麻烦的办法,是通过归 ...

  8. 【Salvation】——关卡功能&数据库基础实现

    写在前面:项目的关卡功能和数据库基础实现是小组其他成员实现的部分,这里作为学习总结.关卡功能块使用C#语言编写脚本,在Unity3D游戏引擎的环境中实现,数据库功能块使用PHP作为服务端获取MySQL ...

  9. CentOS7安装GitLab、汉化、邮箱配置及使用

    同步首发:http://www.yuanrengu.com/index.php/20171112.html 一.GitLab简介 GitLab是利用Ruby On Rails开发的一个开源版本管理系统 ...

  10. 浅析is和as两个关键词在类型转换时的使用

    is检查对象是否兼容与指定类型,返回Boolean值true或者false,值得注意的是,在使用is进行类型转换的时候是永远不会抛出异常的,例如: object o=new Object(); Boo ...