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 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
随机推荐
- 将自己的SpringBoot应用打包发布到Linux下Docker中
目录 将自己的SpringBoot应用打包发布到Linux下Docker中 1. 环境介绍 2. 开始前的准备 2.1 开启docker远程连接 2.2 新建SpringBoot项目 3. 开始构建我 ...
- PHP原生写的生成图片缩略图类
PHP原生写的生成图片缩略图类,本文以京东商品图片为例,分别生成三种不同尺寸的图片.调用方法很简单只要传参数高度和宽度,及新图片的名称. 引入缩略图类 include_once 'ImageResiz ...
- 关于python的一些想法
我来自信息管理与信息系统专业,大一学过c语言但不太精通.学习python是为了学会这门新语言,据了解python会慢慢成为主流编程语言. 因为对绘图方面很感兴趣,希望老师能够在课上多讲一些这方面的东西 ...
- ubuntu搭建svn服务器并htpp访问版本库并svn与web同步
Ubuntu搭建SVN服务器多版本库 1 介绍 Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可 ...
- MATLAB 出一张好看的图
1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定了坐标轴的方向和位置,通过view函数实现视点的设置:view([z y ]):(将坐标系统想象为一座房子,而自己是个会飞的天使 ...
- SQL中NVL函数
空值判断函数 1.NVL(表达式A,表达式B) 如果表达式A为空值,NVL返回值为表达式B的值,否则返回表达式A的值.该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的值可以是数字型. ...
- Redis广播
参见:http://blog.csdn.net/u011734144/article/details/51782085
- concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
var arr1 = ['a', 'b', 'c']; var arr2 = ['d', 'e', 'f']; var arr3 = arr1.concat(arr2); // arr3 is a n ...
- 针对Oracle数据库中SCOTT方案的多表查询的一个例子
查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...
- excle 内部 超链接(锚点)
超连接对象: 1.文档 2.本文档中的位置. 3. 本文重点 指定 链接到 xx表中的xx位置. 第三种连接 类似于 web文档的中 锚点 超连接 看下图 选 择本文档中的位置, 选择 工作表. ...