python连接oracle,把计算结果存入本地excel并发送带附件邮件
来源:互联网 发布:凤险管理矩阵 编辑:程序博客网 时间:2024/05/16 19:21
1、首先是主工作脚本,连接oracle,计算后保存到本地excel中,work.py代码如下
__author__ = 'chunyang.wu'# -*- coding: utf-8 -*-from openpyxl import Workbookfrom openpyxl import load_workbookfrom openpyxl.cell import get_column_letterimport cx_Oracleimport osimport timefrom sendmail import sendmailos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' --该行解决了数据从数据库中取出来,中文编码问题,不然会报错class Create_xlsx: """Create a xlsx and fill with the data""" def __init__(self): self.date = time.strftime("%Y%m%d", time.localtime(time.time())) self.dest_filename = r'/Data/code/huangwen/'+self.date+'.xlsx' self._init_sheet() self._init_db() def _release_db(self): self.conn.commit() # self.curs.close() self.conn.close() def _init_db(self): self.conn = cx_Oracle.connect('username','pass','192.168.10.11:1521/db') self.curs = self.conn.cursor() yh_sql = 'select member_id,nickname,czy from TBL_HQ_USER' self.curs.execute(yh_sql) yh_res = self.curs.fetchall() yh_nickname = {} yh_czy = {} for i in yh_res: yh_nickname[i[0]] = i[1] yh_czy[i[0]] = i[2] sql_fid = 'select distinct fid from TBL_FRAGMENT_COMMENT where member_id in (select member_id from tbl_hq_user)' self.curs.execute(sql_fid) res_fid = self.curs.fetchall() count = 0 for k in res_fid: fid = k[0] data = {} content = [] fidsql = 'select fid,member_id,content,reply_uid from TBL_FRAGMENT_COMMENT where fid = %s and (member_id in (select member_id from tbl_hq_user) or reply_uid in (select member_id from tbl_hq_user)) order by create_time' %fid self.curs = self.conn.cursor() self.curs.execute(fidsql) info_comments = self.curs.fetchall() count += 1 for info in info_comments:count += 1try:data['fid'] = info[0]data['member_id'] = info[1]data['content'] = info[2]data['reply'] = info[3]data['nickname'] = yh_nickname[info[1]]data['czy'] = yh_czy[info[1]]except Exception,ex:print exif yh_nickname.has_key(data['reply']):reply_nickname = yh_nickname[data['reply']]else:reply_nickname = ''# print "czy:%s,uid:%s,nickname:%s,fid:%s,rep_nickname:%s,content:%s" %(data['czy'],data['member_id'],data['nickname'],data['fid'],reply_nickname,data['content'])col = ['A','B','C','D','E','F']wb = load_workbook(filename = self.dest_filename)wb.get_sheet_by_name(name = u'评论内容')ws = wb.worksheets[0]try:ws.cell('%s%s' %(col[0],count)).value = data['czy']ws.cell('%s%s' %(col[1],count)).value = data['member_id']ws.cell('%s%s' %(col[2],count)).value = data['nickname']ws.cell('%s%s' %(col[3],count)).value = data['fid']ws.cell('%s%s' %(col[4],count)).value = reply_nicknamews.cell('%s%s' %(col[5],count)).value = data['content']except Exception,ex:print exwb.save(filename = self.dest_filename)# count += 1# self.curs.close() def _init_sheet(self): wb = Workbook() ws = wb.worksheets[0] ws.title = u"评论内容" bt ={"A1":"操作员",\ "B1":"马甲ID",\"C1":"马甲昵称",\"D1":"原文链接",\"E1":"回复谁",\"F1":"回复内容(如,未回复为空白)"} for i in bt: ws.cell('%s' %i).value = '%s' %bt[i] wb.save(filename = self.dest_filename) def _update_sheet(self,cow,row,data): wb = load_workbook(filename = self.dest_filename) ws = wb.get_sheet_by_name(sheetnames[0]) ws.cell('%s%s'%(col, row)).value = '%s%s' % data def main(): p = Create_xlsx() p._release_db() mail_file = p.dest_filename mail_list = "123456@qq.com;" sendmail(mail_list,mail_file) print time.strftime("%Y%m%d", time.localtime(time.time())),"done!"if __name__ == '__main__':main()
上面的代码调用下面的sendmail脚本发送邮件,发送功能我给封装在一个类里面,其他地方也可以调用,sendmail.py代码如下
# -*- coding: utf-8 -*-from email.header import Header import smtplibimport email.MIMEMultipart# import MIMEMultipartimport email.MIMEText# import MIMETextimport email.MIMEBase# import MIMEBaseimport os.pathimport sysimport timeimport mimetypesimport email.MIMEImage# import MIMEImageclass sendmail:"""this is for sendmail"""def __init__(self,email_addr,filename):#命令 mail.py <1:发送方(回复地址)380968195@qq.com> <2:发送地址,多个以;隔开> <3:发送文件>self.From = "%s<380968195@qq.com>" % Header("带附件email","utf-8")self.ReplyTo = email_addrself.To = email_addrself.file_name = filename #附件路劲和名称self._init_server()def _init_server(self):self.server = smtplib.SMTP("smtp.qq.com",25)self.server.login("username","password") #仅smtp服务器需要验证时self._init_msg()def _init_msg(self):self.main_msg = email.MIMEMultipart.MIMEMultipart()# 构造MIMEMultipart对象做为根容器self.text_msg = email.MIMEText.MIMEText("亲,每天一发,昨天的马甲评论数据,详情请见附件内容。",_charset="utf-8")# 构造MIMEText对象做为邮件显示内容并附加到根容器self.main_msg.attach(self.text_msg)ctype,encoding = mimetypes.guess_type(self.file_name)if ctype is None or encoding is not None:ctype='application/octet-stream'# 构造MIMEBase对象做为文件附件内容并附加到根容器maintype,subtype = ctype.split('/',1)self.file_msg=email.MIMEImage.MIMEImage(open(self.file_name,'rb').read(),subtype)## 设置附件头self.basename = os.path.basename(self.file_name)self.file_msg.add_header('Content-Disposition','attachment', filename = self.basename)#修改邮件头self.main_msg.attach(self.file_msg)# 设置根容器属性self.main_msg['From'] = self.Fromself.main_msg['Reply-to'] = self.ReplyToself.main_msg['To'] = self.Toself.main_msg['Subject'] = time.strftime("%Y%m%d", time.localtime(time.time()))+"马甲评论数据"self.main_msg['Date'] = email.Utils.formatdate(localtime = 1)#main_msg['Bcc'] = To# 得到格式化后的完整文本self.fullText = self.main_msg.as_string()# 用smtp发送邮件try:self.server.sendmail(self.From, self.To.split(';'), self.fullText)finally:self.server.quit()
上面的类传入邮件接收人邮箱(支持多个)及需要发送的本地附件即可。
- python连接oracle,把计算结果存入本地excel并发送带附件邮件
- oracle 发送带附件邮件
- oracle 发送带附件邮件
- python邮件发送带附件
- python+带附件发送邮件
- python发送带附件邮件
- VB2013 发送邮件(Email)并带附件
- python查询mysql导出结果至Excel并发送邮件
- oracle 发送带附件邮件(smtp)
- oracle 发送带附件邮件(smtp)
- Python 发送带 附件 邮件 脚本
- python发送带附件的邮件
- Python 发送带附件邮件客户端
- python发送邮件sendmail--smtplib【带附件】
- Python 发送带 附件 邮件 脚本
- Python发送带附件的SMTP邮件
- 使用Python发送带附件的邮件
- Python SMTP发送邮件 - 带附件
- Visual SVN 密码在线web修改方法
- Android 自定义progressDialog实现
- wc命令
- HTML5的时间属性
- VS2010的附加依赖项,包含目录,库目录保存为模板
- python连接oracle,把计算结果存入本地excel并发送带附件邮件
- dma_alloc_writecombine和dma_alloc_coherent的区别
- 微信公众平台如何开发
- 北京邮电大学世纪学院CSDN高校俱乐部新学期纳新工作圆满完成
- (直接存取类线性表4.1.2)UVA 602 - What Day Is It?(数组的应用---日期系统的转换)
- Struts2单选按钮标签s:radio的使用及其设置默认值
- blocks在Objective-C中是怎么工作的?
- mysql中的光标(游标)的使用
- ie6下的js调试工具companion.js