由于每天到公司都需要先执行一遍检测操作,观察数据是否导入完整,今天想到能否自动连接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. 黄聪:关闭Win2003开机提示“上次意外关机”对话框

    很多人在使用win2003服务器(特别是vps)的时候,都会意外关机,然后出现开机提示“上次意外关机”对话框,如果不及时发现,会影响到使用该服务器的网站,所以必须把这提示关闭,方法如下: 1.开始菜单 ...

  2. Oracle 11g服务器安装详细步骤

    原出处:http://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html 方法/步骤   1 大家可以根据自己的操作系统是多少位(32位或6 ...

  3. mysql 笔记

    mysql配置主从复制的时候,不能将server-id设置成非数字,这样会导致mysqld启动失败. mysql重启的时候,自动会释放锁(这个锁应该是位于内存的) 执行sql脚本:source /ho ...

  4. 动态作用域与this +apply和call +bind

    词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规则. (函数作用域和块作用域) JavaScript 中的作用域就是词法作用域,也就是静态作用域,由定义代码决定 动态作用域似乎暗示有很好的 ...

  5. Linux常见命令

    du -sh 查看当前文件夹大小 tail -f /var/log/nginx/access.log 查看日志 vsFTPd Linux上面的ftp df -lh 查看磁盘 df -i 查看inode ...

  6. 彻底解决rman恢复碰到ora-01152错

    说说碰到这个问题的背景.使用NBU调脚本对oracle进行备份.脚本如下:RUN {ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';ALLOCATE CHANNEL ch0 ...

  7. Unity3D 事件

    unity3d事件函数整理,事件,回调函数,消息处理 Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Star ...

  8. linux命令-find {查找}

    一  命令解释 常用示例 :find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; path: find命令所 ...

  9. Windows Server 2012重复数据删除技术体验

    在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...

  10. ebs双节点webservice部署问题

    出现异常: oracle.webservices.mdds.MddsException: java.io.IOException: Failed to read WSDL from http://eb ...