python3.4.3 连接Oracle生成报表并发送邮件
python很简单,又很实用。当有需求时用起来会更有方向,大可不必从语法、循环等基础看起。
由于工作需要,每天要拉一份报表发给业务的同事,先是用SSIS做了个包部署到服务器上,每天定时拉报表发邮件给同事。为了学一学python,就改写了一份。
从安装python-连接数据库-生成excel-发送邮件,一步步试下来,成功的我真是满心欢喜呀。特地记下来。
import smtplib
import email.mime.multipart
import email.mime.text
import email.mime.base
import os.path
import cx_Oracle
import xlwt
import time #生成excel文件名
v_curr_time = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
v_file_name = '星巴克活动报表-'+ v_curr_time + '.xls ' #连接数据库
conn = cx_Oracle.connect("mobileapp2","mobileapp2","RAC01")
cur1 = conn.cursor() #组查询语句,如果是多行结尾需要加反斜杠连接
v_sql = "SELECT xxx "\
"FROM xxx "\
"WHERE xxx "
print (v_sql)
cur1.execute(v_sql)
rows = cur1.fetchall()
v_cnt = len(rows) #生成excel文件
book=xlwt.Workbook()
sheet1=book.add_sheet('Sheet1') #把列名当作一行数据写入
sheet1.write(0,0,'银行交易时间')
sheet1.write(0,1,'手机号')
sheet1.write(0,2,'金额')
sheet1.write(0,3,'姓名') #当查出多列数据时,需要一个cell一个cell的写入,要不然这四列就会写到excel的一个cell里
for i in range(len(rows)):
for j in range(4):
#print (rows[i][j])
#print ("--------")
sheet1.write(i+1,j,rows[i][j]) book.save(v_file_name)
cur1.close()
conn.close() #邮件信息
From = "aaaa@ccc.com"
To = "bbbb@ccc.com"
file_name = v_file_name server = smtplib.SMTP("mail.ccc.com")
server.login("aaaa","password") #仅smtp服务器需要验证时 # 构造MIMEMultipart对象做为根容器
main_msg = email.mime.multipart.MIMEMultipart() # 构造MIMEText对象做为邮件显示内容并附加到根容器
#v_str = "星巴克活动报表,数据共" + v_cnt + "行"
text_msg = email.mime.text.MIMEText("理财APP星巴克活动报备,昨日首投数据,请查收,谢谢。")
main_msg.attach(text_msg) # 构造MIMEBase对象做为文件附件内容并附加到根容器
contype = v_file_name
maintype, subtype = contype.split(' ') ## 读入文件内容并格式化
data = open(file_name, 'rb')
file_msg = email.mime.base.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read( ))
data.close( )
email.encoders.encode_base64(file_msg) ## 设置附件头
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition',
'attachment', filename = basename)
main_msg.attach(file_msg) # 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = "理财APP:STORY #889::7.17星巴克活动报备 "
main_msg['Date'] = email.utils.formatdate( ) # 得到格式化后的完整文本
fullText = main_msg.as_string( ) # 用smtp发送邮件
try:
server.sendmail(From, To, fullText)
print ("发送成功")
except Exception as e:
print ("发送失败")
print (str(e))
finally:
server.quit()
python3.4.3 连接Oracle生成报表并发送邮件的更多相关文章
- Python3安装cx_Oracle连接oracle数据库实操总结
弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本,然后安装配置就容易了! 如果已经安装Pyth ...
- hibernate tool连接oracle生成pojo和xml文件无法查询表解决办法
需要在hibernate的配置文件中增加 <property name="hibernate.default_schema">[username]</proper ...
- python3.5连接oracle数据及数据查询
今天心血来潮研究下用python连接oracle数据库,看了一下demo,本以为很简单,从操作到成功还是有点坎坷,这里分享给大家,希望为后面学习的童鞋铺路. 一.首先按照cx_Oracle 二:在py ...
- PowerDesigner连接Oracle数据库(32位)反向生成物理数据模型
PowerDesigner可以连接Oracle数据库进行反向生成物理数据模型,本文演示操作过程. 环境说明: 1)Windows8.1,Oracle11R2 32位. 2)PowerDesigner1 ...
- 利用powerDesigner15.1连接oracle数据库并自动生成表结构
利用powerDesigner15.1连接oracle数据库并自动生成表结构 参考:http://blog.csdn.net/qq_24531461/article/details/76713802 ...
- Python3 连接 Oracle 数据库
Python3 连接 Oracle 数据库 需要导出一些稍微复杂的数据,用Python处理很方便 环境 Win10 Python 3.7.0 Oracle 11g 安装依赖 安装 cx_Oracle ...
- C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类
C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类 ps:如需转载,请在转载文章明显处,i标注作者和原文地址 一.准备条件 需要自己电脑上已经安装了Oracle数据库,并且已经创建了相 ...
- Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL
今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成 ...
- 制作一个SSRS的ORACLE数据库报表,使用了时间类型的参数。
需求:我们这个报表是以月为单位,呈现的数据为查询为当前月的第一天到最后一天.条件类似于:time_day > 20140601 and time_day < 20140630 因为是让用 ...
随机推荐
- spring事务管理(xml配置)与spring自带连接数据库JdbcTemplate
什么是事务,很通俗的话来说就是,我们日常生活中总会出现在银行转账的业务,加入A向B转账100元,此时A的账户中应该减少100元,B的账户中增加100元,但是如果在A转完账B还没有接受的时候,服务器出现 ...
- web前端知识day01_HTML
一.HTML入门案例(静夜思) 1.概述 HTML:Hyper Text Markup Language 超文本标记语言超文本:比普通文本功能强大,能实现不同样式(比如加粗,居中,斜体)标记语言:使用 ...
- [LC] 300. Longest Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
- OpenCV Mat - 基本图像容器
Mat 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材 ...
- Linux主机下如何查询自己使用的公网IP
curl http://members.3322.org/dyndns/getip 可以解析出自己是使用哪个公网IP访问外网的
- Linux启动初始化配置文件浅析
转自:http://blog.51cto.com/19055/1144600 1)/etc/profile 登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ec ...
- IIS6.0远程命令执行
0X00 漏洞信息: 漏洞编号:CVE-2017-7269 漏洞简述:开启WebDAV服务的IIS 6.0被爆存在缓存区溢出漏洞导致远程代码执行,目前针对 Windows Server2003 R2 ...
- signals function|KNN|SVM|average linkage|Complete linkage|single linkage
生物医疗大数据 存在系统误差使得估计量有偏,如下图红色和蓝色图形,存在随机误差使得估计量并不是同一个值,如图中除去期望之外的曲线值,为了控制随机抽样造成的误差,可以使用p-value决定是否服从假设检 ...
- 吴裕雄--天生自然 R语言开发学习:基本图形(续三)
#---------------------------------------------------------------# # R in Action (2nd ed): Chapter 6 ...
- @RequestBody 参数为string正常改为对象时不报错但获取不到值
@RequestBody 参数为string正常改为对象时不报错但获取不到值 试了好多办法都不行 最后 原因 jackson 包的版本号不匹配 2.9.0的不能封装进对象,可以运行且不报错但获取不到 ...