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

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

终于第三天完成啦

  1. #encoding=utf-8
  2. import cx_Oracle as oracle
  3. import MYSQLdb as mysql
  4. from datetime import datetime
  5. import xlsxwriter
  6. import sys
  7. '''
  8. author:poleaxe
  9. function:实现统计应用业务量
  10. 原理:读取按照格式的yewu.sql,再将SQL分别查询并返回结果到列表,
  11. 最后创建xlsx文件并写入列表结果
  12.  
  13. yewu.sql格式:
  14. --系统
  15. --业务指标
  16. --数据库
  17. select count(1)/#day from dual
  18. where createdate > #starttime
  19. and createdate < #endtime
  20. --end
  21. 依此类推
  22. '''
  23. reload(sys)
  24. sys.setdefaultencoding('gbk')
  25. username = ''
  26. password = ''
  27. epcis = ''
  28. epods = ''
  29. cxcc = ''
  30. nba4ot = ''
  31. claim = ''
  32. sqlfile = 'yewu.sql'
  33. day=''
  34. starttime = '2017-05-01'
  35. endtime = '2017-06-01'
  36.  
  37. #格式化yewu.sql文件,按照系统、业务、数据库、SQL分割为一个二维列表
  38. def sql_file(sqlfile):
  39. a = open(sqlfile).read.split('--end')
  40. b = []
  41. for i in a:
  42. if i=='' or i =="\n\n":
  43. continue
  44. for j in i.split('--'):
  45. b.append(j.strip()) #清理列表元素空格
  46. arr1 = []
  47. arr2 = []
  48. flag = 0
  49. for k in b:
  50. while flag >3: #创建有4个元素的arr2加入arr1列表
  51. arr1.append(arr2)
  52. #初始化arr2
  53. flag = 0
  54. arr2 = []
  55. print arr1
  56. else:
  57. if k!='' and k!='\n\n' and k!='\n\n\n':
  58. arr2.append(k)
  59. flag += 1
  60. #替换列表里的#day、#starttime及#endtime
  61. for i in range(len(arr1)):
  62. arr1[i][3] = arr1[i][3].replace("#day",day)
  63. arr1[i][3] = arr1[i][3].replace("#starttime",starttime)
  64. arr1[i][3] = arr1[i][3].replace("#endtime", endtime)
  65. return arr1
  66.  
  67. #查询二维列表的oracle SQL语句
  68. def oracle_select(db,sqlstr):
  69. listnew = ''
  70. sql = ''
  71. try:
  72. conn = oralce.connect(username,password,db)
  73. cur = conn.cusor()
  74. sql = cur.excecute(sqlstr)
  75. except Exception, e:
  76. print e.message
  77. else:
  78. listnew = sql.fetchone()
  79. cur.close()
  80. conn.close
  81. return listnew
  82.  
  83. #查询没有mysql数据库的,果断pass哈
  84. def mysql_select(db,sql):
  85. pass
  86.  
  87. #创建EXCEL表格
  88. def write_excel(info):
  89. date_now == datetime.now().strftime("%Y%m%d")
  90. xlsxfilename = '产险IT经营情况报表'.decode('utf-8').encode('gbk')
  91. workbook = xlsxwriter.Workbook(xlsxfilename,{'constant_memory':True})
  92. worksheet = workbook.add_worksheet()
  93. title = ["关键系统名称","业务类别","数据库","日均业务量"]
  94. for i in range(len(title):
  95. worksheet.write(0,i,title[i].decode('uft-8').encode('gbk'))
  96. for i in range(len(info)):
  97. for row, row_date in enumerate(info[i]):
  98. print row,row_date
  99. worksheet.write(i+1,row,row_date)
  100. workbook.close()
  101. return xlsxfilename
  102.  
  103. def main():
  104. info = sql_file(sqlfile)
  105. list_result = []
  106. for sql in info:
  107. list_result.append(oracle_select(sql[2],sql[3])
  108. listnew = []
  109. for i in list_result:
  110. listnew.append(i[0])
  111. for j in range(len(info)):
  112. info[j][3] = listnew[j]
  113. print info
  114. write_excel(info)
  115.  
  116. if __name__ == '__main__':
  117. 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. 初识Git->GitHub

    这不是一篇教程,这是学习过程的一个记录,初次使用GitHub的小白请移步文章末尾的参考链接, 先了解Git是什么东西 Git的工作流程 操作Git 练习使用 边用边学 #--------------- ...

  2. C# 面试知识点网络文档整理

    一 C# .NET技术 1.ASP.NET MVC如何控制权限? 2.C#.NET中的CTS.CLS和CLR? 3.什么是多线程,如何创建和如何使用?请写一个多线程单例模式? 4.什么是单例模式? 5 ...

  3. Springboot admin 发送邮件失败:com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user

    发邮件已经是老生常谈了,今天又遇到了,而且又出了各种问题.我晕哦. 我的配置是: spring.mail.host=smtp..com spring.mail.username=klxxxx spri ...

  4. Go 语言 map (映射)

    1.Go 语言中 map 的定义及初始化: map[Key_Type]Value_Type scence := make(map[string]int) 2.Go 语言的遍历: scene := ma ...

  5. Javascript 使用 async 声明符和 await 操作符进行异步操作

    async function 声明用于定义一个返回 AsyncFunction 对象的异步函数 await  操作符用于等待一个Promise 对象.它只能在异步函数 async function 中 ...

  6. Vue组件间传值 v-model

    使用过Vue的同学应该都了解组件之间传值 父组件 --> 子组件 : props 子组件 --> 父组件 : 事件 其实有一种更为简单的方法,是基于上述两种方法,那就是 v-model 我 ...

  7. Mysql时间差计算

    Mysql如何计算两个时间字段的差值?可用函数 TIMESTAMPDIFF() ----------------------------- TIMESTAMPDIFF函数,有参数设置,可以精确到天(D ...

  8. 循环队列搜索 Search in Rotated Sorted Array

    这里比较重要的是,不要一上来就判断mid 和 target有没有关系.因为数组是无序的,这样的判断毫无结论,只会搞的更复杂.应该先想办法判断出哪一侧是有序的. class Solution { pub ...

  9. python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口

    额,我想表达的是使用os.system()打开另一个可执行文件,然后等待其结束,关闭cmd窗口 主要是我突发奇想想装逼; 如果只是用multiprocessing库的多进程,然后输出信息的话,根本没法 ...

  10. python的车牌号的检测

    自己总结一下,从网上找到的关于车牌号的识别的一些博文.https://www.jianshu.com/p/fcfbd3131b84 https://www.cnblogs.com/do-hardwor ...