poleaxe

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()

 

posted on 2017-05-06 17:00  poleaxe  阅读(274)  评论(0)    收藏  举报

导航