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()
20170506计划-----(基于python查询oracle语句)的更多相关文章
- 基于python实现Oracle数据库连接查询操作
使用python语言连接Oracle数据库配置 #coding:utf-8 import cx_Oracle as oracle db=oracle.connect('root/123456@192. ...
- [Python]查询oracle导出结果至Excel并发送邮件
环境:Linux +python2.7+oracle11g 1.提前安装xlwt(excel写入操作模块),cx_Oracle(oracle操作模块) cx_Oracle的安装步骤详见链接:https ...
- oracle -- 查询执行计划,判读查询语句优劣
以oracle的scott账户:找到员工表中薪水大于本部门平均薪水的员工为例 多表查询方式: select e.empno, e.ename, e.sal, d.avgsal from emp e, ...
- [转载]T-SQL(Oracle)语句查询执行顺序
原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
- 查询Oracle正在执行的sql语句
--查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...
- 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果
一.问题描述 之前使用PLSQL查询oracle数据库可以正常查询统计结果,由于换了个电脑,重新安装之后,同样的sql查询语句同一个数据库,无法正常查询结果,如下图所示 二.解决办法 1. 查询数据当 ...
- Python连接Oracle数据查询导出结果
python连接oracle,需用用到模块cx_oracle,可以直接pip安装,如网络不好,可下载离线后本地安装 cx_oracle项目地址:https://pypi.org/project/cx_ ...
- Oracle 查询(SELECT)语句(一)
Ø 简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
随机推荐
- J Hello word
jave 学习 public class Hello { public static void main (string args []) { int i = 0; for (i = 0; i < ...
- 值得推荐的五大敏捷PHP开发框架
各位开发者,对于在HTML中混乱使用PHP的人来说,我们给大家推荐几款PHP敏捷开发的框架,以及它们为什么能够流行. 在我们开始之前,先了解敏捷开发是个什么东东. 敏捷是一种软件开发方法,每次开发计划 ...
- UICollectionView didSelectItemAtIndexPath实现方法
didSelectItemAtIndexPath是通过UIResponder的四个touch方法实现的(touchBegan, touchMove, touchEnd, touchCancel),因此 ...
- 每日算法之递推排序(P1866 编号)
兔子也是数字控:每个兔子都有自己喜欢的数字区间,找出能让所有兔子都满意的组合. 将所有兔子喜欢的序号按从小到大排序,此时如果小序号的兔子选择了一个数字,则之后的兔子只要排除排在它之前的兔子数(由于已经 ...
- Unable to find a single main class from the following candidates ,显示有两个main class
由于基础框架是用的网上down的源码,我将项目名字改了,估计没有进行maven clean,本地调试的时候没有问题. 当发布时候,执行maven install 一直提示上述错误. 解决办法:1.ma ...
- node note
1.关于next() next()函数接受一个Error对象,在判断错误时,返回这个next()函数,并传入自定义的Error对象可以被向下捕捉,你也可以自定义统一捕捉错误Error的中间件,在app ...
- 【读书笔记】segment routing mpls数据平面-2
- 7、...arg ...[1,2,3] 数组扩展
1.将离散的参数转成数组 2.将数组拆成单个离散的值 https://blog.csdn.net/qq_30100043/article/details/53391308 箭头函数写法 函数名 -&g ...
- Python 3之Django2部署(centos7+nginx+python3+django2.0)
前置工具,系统为centos7.5,为了方便管理,可以安装宝塔免费版本 首先, yum install -y wget && wget -O install.sh http://dow ...
- mysql Table 'user' is marked as crashed and should be repaired
myisamchk -f x:\xxxxxxxxx\MySQL\data\mysql\*.MYI