python定时取数据库数据_python数据库取数 定时发送邮件

我们在工作中有没有遇到过总是有些定时发送邮件的任务,前段时间刚好在网上看到类似的分散案例,今天有时间就拼凑了下,拼凑出了一个完整的自动化每天定时从数据库取数保存成数据文件,作为附件发送邮件。

#导入库——从数据库取数到保存成csv阶段

import mysql.connector

import xlwt

from datetime import datetime

#自定义函数——数据库取数

def get_data(sql):

# 创建数据库连接,user账号,password为账号密码,database为数据库名

conn = mysql.connector.connect(user='****', password='*******', database='*****')

# 创建游标

cur = conn.cursor()

# 执行查询

cur.execute(sql)

# 由于查询语句仅会返回受影响的记录条数并不会返回数据库中实际的值,所以此处需要fetchall()来获取所有内容

result = cur.fetchall()

#关闭游标

cur.close()

#关闭数据库连接

conn.close

# 返给结果给函数调用者

return result

#自定义函数——把读取的数据库数据保存成一个csv文件

def write_data_to_excel(name,sql):

# 将sql作为参数传递调用get_data并将结果赋值给result,(result为一个嵌套元组)

result = get_data(sql)

# 实例化一个Workbook()对象(即excel文件)

wbk = xlwt.Workbook()

# 新建一个名为Sheet1的excel sheet。此处的cell_overwrite_ok =True是为了能对同一个单元格重复操作。

sheet = wbk.add_sheet('Sheet1',cell_overwrite_ok=True)

# 获取当前日期,得到一个datetime对象如:(2016, 8, 9, 23, 12, 23, 424000)

today = datetime.today()

# 将获取到的datetime对象仅取日期如:2016-8-9

today_date = datetime.date(today)

# 遍历result中的每个元素。

for i in range(len(result)):

#对result的每个子元素作遍历,

for j in range(len(result[i])):

#将每一行的每个元素按行号i,列号j,写入到excel中。

sheet.write(i,j,result[i][j])

# 以传递的name+当前日期作为excel名称保存。

wbk.save(name+str(today_date)+'.csv')

#调用前面的两个自定义函数

get_data("select * from customer limit 10")

write_data_to_excel("customer","select * from customer limit 10")

#导入库——调用QQ邮箱接口阶段

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

today = datetime.today()

today_date = datetime.date(today)

sender = '*******@qq.com'#发送邮件的邮箱

receivers = ['*******@qq.com'] # 接收邮件的邮箱

password = '***********'#qq邮箱的授权码

smtp_server = 'smtp.qq.com'#如果是163邮箱的话改成http://smtp.163.com,网上可以查这个

#创建一个带附件的实例

message = MIMEMultipart()

message['From'] = Header("任萍", 'utf-8')

message['To'] = Header("***", 'utf-8')

subject = 'custome'

message['Subject'] = Header(subject, 'utf-8')

#邮件正文内容

message.attach(MIMEText('请查收!!!', 'plain', 'utf-8'))

# 构造附件1,传送当前目录下的 test.txt 文件

att1 = MIMEText(open("customer"+str(today_date)+'.csv' , 'rb').read(), 'base64', 'utf-8')

att1["Content-Type"] = 'application/octet-stream'

# 这里的filename可以任意写,写什么名字,邮件中显示什么名字

att1["Content-Disposition"] = 'attachment; filename="customer.csv"'

message.attach(att1)

# 构造附件2,传送当前目录下的 runoob.txt 文件

att2 = MIMEText(open('customer2019-01-03.csv', 'rb').read(), 'base64', ‘utf-8')

att2["Content-Type"] = 'application/octet-stream'

att2["Content-Disposition"] = 'attachment; filename="customer2019-01-03.csv"'

message.attach(att2)

try:

server = smtplib.SMTP(smtp_server, 25)#SMTP协议的默认TCP端口号是25

server.set_debuglevel(1)

server.login(sender, password)

server.sendmail(sender, receivers, message.as_string())

server.quit()

print ("邮件发送成功")

except smtplib.SMTPException:

print ("Error: 无法发送邮件")

补充:如何设置邮箱使得发件人邮箱开启SMTP协议,并获取授权码,也就是上述代码中的password。

设置——账户——开启服务:POP3/SMTP服务——发送短信获取到授权码

补充:如何在windows下设置定时任务,是的python程序可以每天定时被执行。

这里解释一下三个文本框内容的含义:

【程序或脚本】文本框中填的是Python编译器的名称,一般就是python.exe;

【添加参数】文本框中填的是你的Python程序的完整路径;

【起始于】文本框中填的是Python编译器的目录。

【微信公众号】:Pepper数据分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值