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 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
随机推荐
- 72.纯 CSS 创作气泡填色的按钮特效
原文地址:https://segmentfault.com/a/1190000015560736 感想:过渡效果+xyz中一轴. HTML code: <nav> <ul> & ...
- tornado框架设置
路由 import tornado.ioloop #开启循环 让服务器一直等待请求的到来 import tornado.web #框架基本功能封装在此模块 #例子 class MainHendler( ...
- sql server 报错处理
1.错误:针对程序集 'StoreProc' 的 CREATE ASSEMBLY 失败,因为程序集 'StoreProc' 未获授权,不满足 PERMISSION_SET = UNSAFE.满足以下两 ...
- python3下同时取得exe、zip和chm下载地址
from selenium import webdriverimport osimport timeimport re cur_path=os.getcwd() #得到程序的当前目录str_file= ...
- 电脑修改密码后git上传失败Authentication failed
(一)进入控制面板 (二)选择用户账户 (三)选择管理你的凭据 (四)选择Windows凭据 (五)选择git保存的用户信息 (六)选择编辑或者进行删除操作 (七)完成
- if、else、else if后的条件执行体
if.else.else if后的条件执行体有两种情况:一种是用大括号“{ }”括起来的代码块,这个代码块被称作条件执行体:另一种是以分号“:”作为结束符的单行语句或空语句(仅有一个分号),这个单行语 ...
- Vim 简明教程【转载】
简明 Vim 练级攻略 第一级 – 存活 安装 vim 启动 vim 什么也别干!请先阅读 当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子.但vim不是这样的,请 ...
- pymysql -转自https://www.cnblogs.com/chenhaiming/p/9883349.html#undefined
PyMysql的几个重要方法 connect函数:连接数据库,根据连接的数据库类型不同,该函数的参数也不相同.connect函数返回Connection对象. cursor方法:获取操作数据库的Cur ...
- jQuery之遍历索引相关方法
遍历索引相关方法: .each(),补充.children() .index() 1 .each() 2..children() .index()
- async:false;渲染阻塞
当我想让一个节点show()完以后再ajax获取数据进行操作: $("#outerdiv2").show(); $.ajax({}): 如果此时ajax里设置了async:fals ...