由于每天到公司都需要先执行一遍检测操作,观察数据是否导入完整,今天想到能否自动连接Mysql执行SQL并导出数据,每天到公司直接查看excel文件即可

时间紧,代码初次试验,边摸索边学习吧。

xlsxwriter 模块及excel格式设置的format()方法参考这里http://xlsxwriter.readthedocs.io/format.html

#coding:utf-8
import time
import datetime
import os
import MySQLdb
import xlsxwriter
#因为数据只更新到昨日 因此命名以昨日所在的年月日命名 同时今天执行时候删除昨日的文件
starttime=time.time()
yestoday= datetime.date.today()-datetime.timedelta(days=1)
beforeyestoday= datetime.date.today()-datetime.timedelta(days=2)
oldfile=str(beforeyestoday)+'.xlsx'
newfile=str(yestoday)+'.xlsx'
#删除昨日执行文件
if os.path.isfile(oldfile):
os.remove(oldfile)
else:
pass
#当天如果多次测试 将当天文件也删除 测试通过 条件判断可删除
if os.path.isfile(newfile):
os.remove(newfile)
else:
pass
#连接mysql 返回数据集对象
def getdata():
conn = MySQLdb.connect(host='服务器IP地址', user='root', passwd='密码', db='local_db', port=3306, charset='utf8')
cursor = conn.cursor()
test_sql = '''
SELECT DATE(订单日期) AS 订单日期,SUM(金额) AS 总计 ,SUM(IF(城市="北京",金额,NULL)) AS 北京,SUM(IF(城市="成都",金额,NULL)) AS 成都
,SUM(IF(城市="杭州",金额,NULL)) AS 杭州,SUM(IF(城市="济南",金额,NULL)) AS 济南,SUM(IF(城市="长春",金额,NULL)) AS 长春
,SUM(IF(城市="青岛",金额,NULL)) AS 青岛,SUM(IF(城市="南京",金额,NULL)) AS 南京,SUM(IF(城市="郑州",金额,NULL)) AS 郑州
,SUM(IF(城市="西安",金额,NULL)) AS 西安
FROM a003_order
WHERE 金额>0 AND 订单日期>=DATE_ADD(CURRENT_DATE,INTERVAL -15 DAY) AND 订单日期<CURRENT_DATE
GROUP BY DATE(订单日期)
'''
count=cursor.execute(test_sql)
data=cursor.fetchall()
fields = cursor.description
cursor.close()
conn.close()
#将数据集的表头和数据集记录传入一个字典 并返回 以便下面函数调用
dict={}
dict['fields']=fields
dict['data']=data
return dict
#获取数据集后取出记录写入excel
def write_excel():
#调用getdata()函数 将getdata()函数返回的数据集赋值给变量fields 和 data 对data进行取出数据记录操作
dict=getdata()
#获取表头
fields=dict['fields']
#获取数据集
data = dict['data']
workbook = xlsxwriter.Workbook(newfile)
worksheet = workbook.add_worksheet('data')
#表头格式
format1 = workbook.add_format({'bold': True, 'font_color': 'red','font_size':11,'align':'left','font_name':u'宋体'})
#日期A列区域
format2 = workbook.add_format({ 'font_color': 'black', 'font_size': 9,'align':'left','num_format':'yyyy-mm-dd','font_name':u'宋体'})
#除日期A列外数值区域
format3 = workbook.add_format({'font_color': 'black', 'font_size': 9, 'align': 'left','font_name':u'宋体'})
#A列列宽设置能更好的显示
worksheet.set_column("A:A", 9)
#插入第一行表头标题
for i in range(0, len(fields)):
field = fields[i][0]
worksheet.write(0, i, field.decode('utf-8'),format1)
#插入15行第一列 订单日期 日期取字符型
for j in range(0, 15):
worksheet.write(j + 1, 0, str(data[j][0]).decode('utf-8'),format2)
#插入15行第2-10列 数字取整数
for x in range(0, 15):
for y in range(1, 11):
db = int(data[x][y])
worksheet.write(x+1 , y, db,format3)
workbook.close()
return "写入成功"
print write_excel()
endtime=time.time()
print "用时"+str(endtime-starttime)+"s"

 执行导出到excel是下图 数据已处理 明天执行时候会先删除今天执行生成的文件

Python 2.7_初试连接Mysql查询数据导出到excel_20161216的更多相关文章

  1. 使用Connector / Python连接MySQL/查询数据

    使用Connector / Python连接MySQL connect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象 在python中有以下几种方法可以连接到M ...

  2. 使用Python3导出MySQL查询数据

    整理个Python3导出MySQL查询数据d的脚本. Python依赖包: pymysql xlwt Python脚本: #!/usr/bin/env python # -*- coding: utf ...

  3. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  4. 十二、MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  5. mysql 查询数据时按照A-Z顺序排序返回结果集

    mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...

  6. MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  7. navicat for Mysql查询数据不能直接修改

    navicat for Mysql查询数据不能直接修改 原来的sql语句: <pre> select id,name,title from table where id = 5;</ ...

  8. [记录]MySQL 查询无法导出到文件

    很多时候我们需要将数据导出到 xls文件, 然后交给数据分析师分析. 而这个查询数据+导出的动作,理应使用一个有只读权限的用户使用. 但查询某表时: select * from table ,此用户可 ...

  9. mysql的数据导出方法

    mysql的数据导出几种方法   从网上找到一些问题是关于如何从MySQL中导出数据,以便用在本地或其它的数据库系统之上:以及 将现有数据导入MySQL数据库中. 数据导出 数据导出主要有以下几种方法 ...

随机推荐

  1. 【学】React的学习之旅7-官方例子总结

    如果在标签里有注释,除了使用/**/之外,如果写在子标签中,外面还需要用{}包起来,指明这段是javascript代码,否则这段注释会直接显示在页面上,例如 render:function (){ r ...

  2. Spark代码调优(一)

    环境极其恶劣情况下: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.sp ...

  3. subline

    快捷键(preference->key bindings): [ { "keys": ["ctrl+d"], "command": & ...

  4. mysql grant命令错误:ERROR 1044 (42000): Access denied for 'root' With All Privileges

    http://stackoverflow.com/questions/21714869/error-1044-42000-access-denied-for-root-with-all-privile ...

  5. form表单的enter自动提交

    当form中只有一个文本框时并且获得焦点 按enter时,就会自动提交表单.阻止自动提交 可以添加一个隐藏的input框 <input type="text" style=& ...

  6. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

  7. 学习indy组件之一idhttp的使用方法

    登录 注册 百度首页 新闻 网页 贴吧 知道 音乐 图片 视频 地图 百科 文库 经验 搜索答案我要提问 首页 分类 公社 知道行家 问医生 高质量问答 经验 个人中心手机知道开放平台   关于del ...

  8. Ice分布式程序设计—IceBox(Hello World Application)

    忙了三天,总算浏览完此书.藉此记下 Ice 的 IceBox 服务框架. 在此用 IceBox 框架写 Hello World 程序,即以载体来体现其特性. 第一步:编写 Slice 文件,映射生成 ...

  9. 工作流软件是未来web的支柱

    Web 3.0正在敲门,但是开门的人你永远都想不到:工作流软件. 传统上工作流软件是企业级的业务流程管理工具,但现在随着网络互联程度的加深,工作流软件开始呈现出其作为互联网技术的一面. 诚然,社会化媒 ...

  10. mac 10.9 安装 gevent

    安装步骤: Gevent依赖libevent和greenlet,需要分别安装. 1,安装 macport (如已安装,可以跳过) 2,通过终端 键入: sudo port install libeve ...