20170529计划---统计业务量并生成EXCEL通过邮件发送
每个月都要统计这些业务量的东东,烦死了,赶紧通过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通过邮件发送的更多相关文章
- 生成统计数据并导出Excel
需求:看如下表格的统计需求 生产调度中心部门需要从IT技术部门得到这些统计数据 步骤: (1)获取所有的子公司列表 (2)遍历所有的子公司,获取每个子公司的库存信息 (3)遍历所有的库存信息,并对库存 ...
- Python实战 :2017国考职业表excel转数据库,再查询生成excel
最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7 x ...
- 在.NET中使用EPPlus生成Excel报表 .
--摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- XLSTransformer生成excel文件
jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符 XLSTransformer transformer = new XL ...
- 用python读文件如.c文件生成excel文件
记录一下,如何实现的,代码如下: #!/usr/bin/env python # coding=utf-8 # 打开文件 import xlwt import re import sys bookfi ...
- python查询mysql并生成excel表
需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...
- python生成Excel图表(通过xlsxwriter)
前面介绍了pandas的简单用法,pandas的数据可以通过matlab第三方包将数据生成报表,但是我想将报表生成在Excel中,这时候就可以借助xlsxwriter第三方包来生成图标 缺点:xl ...
- org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI
优点:不依赖Microsoft组件,在内存中操作excel,读写速度快. 缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...
随机推荐
- 关于Hibernate和Strtus2的xml提示问题
话不多说,上图 1.Windom 2.preferences 3.搜索框搜索xml catalog 点击Add 4.导入约束(具体操作图上1.2.3)
- Kafka(2)--kafka基本原理之消息的分发与接收
关于 Topic 和 Partition Topic 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合.每条消息发送到 kafka 集群的消息都有一个类别.物理上来说, ...
- (12)SecureCRT中文乱码问题
Options -- Session Options -- Appearance --Character encoding:选择UTF-8
- js自执行事件
let a = document.createElement("a");let event = new MouseEvent("click");a.downlo ...
- DatakeyNames和datakey
DataKey 类用于表示数据绑定控件中某个记录的主键.记录的主键可以由数据源中的一个或多个字段组成.尽管 DataKey 类不是集合,但它可以存储多个键字段值.当调用 DataKey 类的某个构造函 ...
- python学习笔记----面向对象
面向对象 类:成员变量(属性) 方法(操作成员变量) 出一个场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...
- MySql数据库时区异常,java.sql.SQLException: The server time zone value '?й???׼ʱ?' is unrecognized or represents more than one time zone.
JDBC访问MySql异常 Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException ...
- abaqus2016安装过程中出现error:unable to add abaqus command directory to PATH variable
请问abaqus2016安装过程中出现error:unable to add abaqus command directory to PATH variable是什么原因,怎么解决啊,总是安装失败 这 ...
- 同步pod时区与node主机保持一致
一.通过环境变量设置 apiVersion: v1 kind: Pod metadata: name: pod-env-tz spec: containers: - name: ngx image: ...
- 【396】python 递归练习题(COMP9021)
Merging two strings into a third one Say that two strings s1 and s2 can be merged into a third strin ...