本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

python操作MySQL,并定时发邮件

文章内容简介:

      日常数据报表的制作,理解业务,并确定相关指标体系,确定日常报表模板的结构,为摆脱每天sql跑数,excel呈现的重复操作工作,现写python语言,优化流程。

需求如下:

按每日sql跑数,并将数据结果以邮件形式,附带正文附件,定时发送

import python模块:

1、操作excel模块:xlwt(写入excel),xlrd(读取excel数据)

2、操作MySQL模块:MySQLdb(目前公司用的是Navicat客户端,如果附带SSH通道,还需要用到paramiko模块)

3、发送邮件需要smtplib, MIMEText, MIMEMultipart, Header(此处用到的是腾讯企业邮箱)

4、处理日期时间模块datetime, time

    (这些模块的安装都比较简单,我用的编辑器是PyCharm,很多功能我也是小白


思路概括:

       编写程序的时候用的最多的是函数def,并未上升到类的层级,另外,邮件正文本质上是一个html文件,只需要将数据,嵌套到html的表格中即可,其他的依据模块中的函数均可到到目的。

第一步:建excel表格,并添加sheet,及对应表格相对应的字段

excel = xlwt.Workbook(encoding='utf-8', style_compression=0)   #建excel代码

sheet = excel.add_sheet('yj', cell_overwrite_ok=True)       #给excel添加sheet表格

sheet.write( '行标', '列标', '要添加的内容')#如果一行需要添加好多字段,请建立列表,进行循环插入,之后需要跑sql的数据,也可以按此方法进行添加

第二步:操作MySQL,取数

def MySQLexcel(sql, sheet):#如果多次使用sql,并分别添加到不同的sheet里面,故可以考虑函数参数如何定义

        db = MySQLdb.connect()

        cursor = db.cursor()

        cursor.execute(sql)

        results = cursor.fetchall()#获取跑sql数据结果

            #循环将数据结果循环添加值表中(如果可以将excel的格式进行调整会更好)

        db.close()

第三步:邮件正文

def writemail():#添加邮件正文部分

'<html>

<head></head>

<body>

<table>

<tr>

<th>此处添加数据表头</th>

<td>此处添加数据</td>

</tr>

</table>

</body>

</html>'#分别用不同的变量来确定html各部分

  mail = header + th + body + tail

  return mail#返回整个html,即为mail,邮件正文

第四步:发送邮件

def sendmail():#添加邮件正文部分,函数参数可以根据需求进行调整

        #设置发件人、收件人、邮件主题、发件服务器、登录账户、等率密码

        #添加邮件所呈现的内容

        message = MIMEMultipart()
        message['From'] = Header("<***@qq.com>", 'utf-8')
        message['To'] = Header("<***@qq.com>", 'utf-8')
        message['Subject'] = Header("邮件主题", 'utf-8')

        #邮件正文添加

        message.attach(MIMEText(mail, 'html', 'utf-8'))#为什么就认为此处添加的是邮件正文

       #邮件附件添加

       att1 = MIMEText(open(address, 'rb').read(), 'base64', 'utf-8')#附件内容
       att1["Content-Type"] = 'application/octet-stream'#附件类型
       att1["Content-Disposition"] = 'attachment; filename=""' #添加的位置是附件
       message.attach(att1)

       #发送邮件

        try:
               smtpObj = smtplib.SMTP()
               smtpObj.sendmail(sender, receivers, message.as_string())

               print "邮件发送成功"

        except smtplib.SMTPException:

               print "Error: 无法发送邮件"

          #此处用到了try except,在处理一些错误发生时,同时还需要程序继续运行

第五步:定时发送

def waittotomorrow():#这个原理还是不是很清楚

     tomorrow = datetime.datetime.replace(datetime.datetime.now(), hour=7,                 minute=10, second=0)

    delta = tomorrow - datetime.datetime.now()

    time.sleep(delta.seconds)


while True:

        waitToTomorrow()

         execfile("**.py")

第六步:定义main()

def main():#涉及到将以上函数组合一块


转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/208
问题交流群 :562864481
1
打赏
发布时间 :2016-10-27 15:26:33
分享

1 个评论

  • 用心生活的水瓶
    回复
    2016-10-27 15:27
    文章中部分代码未按python,严格的空格要求,请注意

要回复文章请先登录注册