每个月都要统计这些业务量的东东,烦死了,赶紧通过python写一个来搞定吧,三天搞定吧,未完待续哈。

2017-5-29 19:50粗略地做了一个思维导图哈

终于第三天完成啦

 #encoding=utf-8
import cx_Oracle as oracle
import MYSQLdb as mysql
from datetime import datetime
import xlsxwriter
import sys
'''
author:poleaxe
function:实现统计应用业务量
原理:读取按照格式的yewu.sql,再将SQL分别查询并返回结果到列表,
最后创建xlsx文件并写入列表结果 yewu.sql格式:
--系统
--业务指标
--数据库
select count(1)/#day from dual
where createdate > #starttime
and createdate < #endtime
--end
依此类推
'''
reload(sys)
sys.setdefaultencoding('gbk')
username = ''
password = ''
epcis = ''
epods = ''
cxcc = ''
nba4ot = ''
claim = ''
sqlfile = 'yewu.sql'
day=''
starttime = '2017-05-01'
endtime = '2017-06-01' #格式化yewu.sql文件,按照系统、业务、数据库、SQL分割为一个二维列表
def sql_file(sqlfile):
a = open(sqlfile).read.split('--end')
b = []
for i in a:
if i=='' or i =="\n\n":
continue
for j in i.split('--'):
b.append(j.strip()) #清理列表元素空格
arr1 = []
arr2 = []
flag = 0
for k in b:
while flag >3: #创建有4个元素的arr2加入arr1列表
arr1.append(arr2)
#初始化arr2
flag = 0
arr2 = []
print arr1
else:
if k!='' and k!='\n\n' and k!='\n\n\n':
arr2.append(k)
flag += 1
#替换列表里的#day、#starttime及#endtime
for i in range(len(arr1)):
arr1[i][3] = arr1[i][3].replace("#day",day)
arr1[i][3] = arr1[i][3].replace("#starttime",starttime)
arr1[i][3] = arr1[i][3].replace("#endtime", endtime)
return arr1 #查询二维列表的oracle SQL语句
def oracle_select(db,sqlstr):
listnew = ''
sql = ''
try:
conn = oralce.connect(username,password,db)
cur = conn.cusor()
sql = cur.excecute(sqlstr)
except Exception, e:
print e.message
else:
listnew = sql.fetchone()
cur.close()
conn.close
return listnew #查询没有mysql数据库的,果断pass哈
def mysql_select(db,sql):
pass #创建EXCEL表格
def write_excel(info):
date_now == datetime.now().strftime("%Y%m%d")
xlsxfilename = '产险IT经营情况报表'.decode('utf-8').encode('gbk')
workbook = xlsxwriter.Workbook(xlsxfilename,{'constant_memory':True})
worksheet = workbook.add_worksheet()
title = ["关键系统名称","业务类别","数据库","日均业务量"]
for i in range(len(title):
worksheet.write(0,i,title[i].decode('uft-8').encode('gbk'))
for i in range(len(info)):
for row, row_date in enumerate(info[i]):
print row,row_date
worksheet.write(i+1,row,row_date)
workbook.close()
return xlsxfilename def main():
info = sql_file(sqlfile)
list_result = []
for sql in info:
list_result.append(oracle_select(sql[2],sql[3])
listnew = []
for i in list_result:
listnew.append(i[0])
for j in range(len(info)):
info[j][3] = listnew[j]
print info
write_excel(info) if __name__ == '__main__':
main()

20170529计划---统计业务量并生成EXCEL通过邮件发送的更多相关文章

  1. 生成统计数据并导出Excel

    需求:看如下表格的统计需求 生产调度中心部门需要从IT技术部门得到这些统计数据 步骤: (1)获取所有的子公司列表 (2)遍历所有的子公司,获取每个子公司的库存信息 (3)遍历所有的库存信息,并对库存 ...

  2. Python实战 :2017国考职业表excel转数据库,再查询生成excel

    最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7   x ...

  3. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  4. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  5. XLSTransformer生成excel文件

    jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符                 XLSTransformer transformer = new XL ...

  6. 用python读文件如.c文件生成excel文件

    记录一下,如何实现的,代码如下: #!/usr/bin/env python # coding=utf-8 # 打开文件 import xlwt import re import sys bookfi ...

  7. python查询mysql并生成excel表

    需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...

  8. python生成Excel图表(通过xlsxwriter)

    前面介绍了pandas的简单用法,pandas的数据可以通过matlab第三方包将数据生成报表,但是我想将报表生成在Excel中,这时候就可以借助xlsxwriter第三方包来生成图标   缺点:xl ...

  9. org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI

    优点:不依赖Microsoft组件,在内存中操作excel,读写速度快.   缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...

随机推荐

  1. QMap迭代器

    QMap<int, QString> intToStr; intToStr[] = "test" for (auto iter = intToStr.begin(); ...

  2. 在虚拟机上的ubuntu 1.6 系统中sudo apt-get失败的问题

    在虚拟机上sudo apt-get update 失败.可能是网络dns问题,把nameserver \设为你路由器的内网ip地址就没事了; 详细: 1/打开sudo gedit /etc/resol ...

  3. 6993: Dominoes(纯bfs)

    题目描述Orz likes to play dominoes. Now giving an n*m chessboard and k dominoes whose size are 1*2, Orz ...

  4. LevelDB源码分析-Write

    Write LevelDB提供了write和put两个接口进行插入操作,但是put实际上是调用write实现的,所以我在这里只分析write函数: Status DBImpl::Write(const ...

  5. django restfulwork 源码剖析

    概要: 1.restful 规范(建议); 2. django rest framework框架 内容回顾: 1.开发模式; - 普通开发模式(前后端放在一起写) - 前后端分离 好处: 后端一套,前 ...

  6. echarts 技巧自己的一些记录

    1.不要输出 window["echarts"].init(chart) ,会卡死. let chart = document.getElementById("chart ...

  7. C语言顺序栈

    10进制转任何进制 #include<stdio.h> #include<stdlib.h>#define maxSize 30typedef int DataType;typ ...

  8. 2016word多级列表 一级标题居中后偏左

    一.如下图所示,定义好多级列表之后设置标题,但是发现标题居中后偏左. 二.选择多级列表,设置居左对齐

  9. Django 缓存

    官方文档 缓存的出现就是为了减轻对数据库的压力和加快内存访问的速度.我们的访问请求最终都是返回一个大的字符串,缓存就是将这段字符串直接存储起来,下次你来了,不用经过view去数据库或者内存拿到数据再渲 ...

  10. (九)random、os、time、datetime、hashlib、pymysql、excel、sys、string相关模块

    1.random模块 1 import random,string 2 print(string.printable) #代表所有的 数字+字母+特殊字符 3 4 print(random.randi ...