20170506计划-----(基于python查询oracle语句)
在日常的工作中,经常接到开发同事查询生产SQL的请求,公司又不允许对开发开放查询SQL的权限,并且查询的堡垒机又很慢,计划做一个可以自动查询SQL的小工具,一周内完成吧。
大概功能实现了,一些涉及敏感的信息已去掉。
#encoding:utf-8 import cx_Oracle import csv import xlwt import xlrd import zipfile import time import xlsxwriter from datetime import datetime from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib import sys import os reload(sys) sys.setdefaultencoding('gbk') username = '' password = '' epcis = '' epods = '' cxcc = '' nba4ot = '' claim = '' sqlfile ='select.sql' #date_now=datetime.now().strftime("%Y%m%d%H%M") #zipfilename ='查询结果_'.decode('utf-8').encode('gbk')+"_"+str(date_now)+".zip" #打开查询SQL文件 def sqlstr(sqlfile): reSql=open(sqlfile,'r').read().strip() '''for i in open(sqlfile,'r').readlines(): if i.startswith('#') == True: #忽略掉#号开头的行 pass else: selectsql = selectsql + i reSql = selectsql.split(';')''' print reSql return reSql def selectdb(db,selectsql): selectsql=sqlstr(sqlfile) print selectsql conn = cx_Oracle.connect(username,password,db) cur = conn.cursor() sql = cur.execute(selectsql) listnew=[] title = [i[0] for i in cur.description] listnew.append(title) sqllist = [] sqllist = sql.fetchall() listnew.append(sqllist) cur.close() conn.close return listnew #生成excel文件 def createxlsx(sqldate): date_now=datetime.now().strftime("%Y%m%d%H%M") xlsxfilename = '查询结果_'.decode('utf-8').encode('gbk')+str(date_now)+'.xlsx' workbook = xlsxwriter.Workbook(xlsxfilename,{'constant_memory':True}) worksheet = workbook.add_worksheet() worksheet.write_row(0,0,sqldate[0]) for row,row_date in enumerate(sqldate[1]): worksheet.write_row(row+1,0,row_date) workbook.close() return xlsxfilename def zipFile(xlsxfilename): date_now=datetime.now().strftime("%Y%m%d%H%M") zipfilename ='查询结果_'.decode('utf-8').encode('gbk')+"_"+str(date_now)+".zip" f = zipfile.ZipFile(zipfilename,'w',zipfile.ZIP_DEFLATED) zippath = "D:\Python27" zipfilelist = [] for i in os.listdir(zippath): if os.path.isfile(i): zipfilelist.append(i) for files in zipfilelist: if xlsxfilename in files: f.write(files) os.remove(files) f.close() return zipfilename def sendmail(zipfilename): msg = MIMEMultipart() att1_name=zipfilename att1 = MIMEText(open(zipfilename,'rb').read(),'base64','gb2312') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"]='attachment;filename=%s'% att1_name.encode('gbk') msg.attach(att1) msg['to']='dingxiyu024@pingan.com.cn' msg['from']='dingxiyu024@pingan.com.cn' msg['subject']="SQL查询结果".decode('utf-8').encode('gbk') try: server=smtplib.SMTP() server.connect('mailgw2.paic.com.cn') server.login('','') server.sendmail(msg['from'],msg['to'],msg.as_string()) server.quit() print 'send mail successful.' except Exception,e: print str(e) def main(): sendmail(zipFile(createxlsx(selectdb(epcis,sqlfile)))) if main()=='__main__': main()
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号