- 开发配置:
- python3 + mysql + mac(Windows环境可能有点差异,大家开发的时候注意一下)
# 连接数据库并查询数据
def getData(sql_string):
import pymysql
log.info("Connect to the database")
'''
host:数据库地址
user:用户名
password:密码
port:端口
db:实例名
'''
db = pymysql.connect(host='', user='', password='', port=3306,
db='', charset='utf8')
# 创建一个游标对象
cursor = db.cursor()
cursor.execute(sql_string)
des = cursor.description
# log.info("Get query result field name")
fields = [field[0] for field in des]
# log.info("Get query result content")
results = cursor.fetchall()
log.info("close database connection")
db.close()
return export_excel(fields, results)
- 导出到excel
# 导出excel
def export_excel(fields, results, ):
import xlwt, time
log.info("generate result file .........")
# 写入excel
book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')
# 写入表头
# log.info("write header")
for col, field in enumerate(fields):
sheet.write(0, col, field)
# 写入数据内容
# log.info("write data content")
row = 1
for data in results:
for col, field in enumerate(data):
sheet.write(row, col, field)
row += 1
# 获取当前时间
now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
# 目录可以自己定义,默认导出到脚本同级目录
fileName = "%s.xls" % now_time
log.info("export file location :%s", fileName)
book.save(fileName)
return fileName
- 发送邮件
# 发送邮件
def send_mail(file_name, send_mail):
import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
log.info("Email is being sent .........")
try:
# 创建一个带附件的实例
MailWithFile = MIMEMultipart()
# 设置发件人信息(自己定义)
MailWithFile['From'] = formataddr(["运维组", '11111111111@qq.com'])
# 设置收件人信息
MailWithFile['To'] = formataddr(["", send_mail])
# 设置邮件title
MailWithFile['Subject'] = "提数导出结果"
# 设置邮件正文的内容
'''邮箱发送的内容:
1:参数为发送的正文内容,
2:参数为设置格式(plain 为纯文本),
3:参数为正文的编码'''
MailWithFile.attach(MIMEText('提数完成,详情请查看附件!', 'plain', 'utf-8'))
# 附带多个附件,发送邮件
# 设置发送的附件路径
y = [file_name]
for t in y:
log.info("file_name %s", t)
# 构造附件 ,获取附带的文件
AccessToTheAttachment = MIMEApplication(open(t, 'rb').read())
# filename表示邮件中显示的附件名
AccessToTheAttachment.add_header('Content-Disposition', 'attachment', filename='%s' % "提数结果.xlsx")
MailWithFile.attach(AccessToTheAttachment)
'''(发信服务器, 端口号)'''
NowServer = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 设置登录邮件的账号,授权码(可以自行去个人邮箱申请获取)
NowServer.login('111111@qq.com', 'kiuxlnaoeexgjegj')
# 设置发送邮件:发件人、收件人
NowServer.sendmail('111111111@qq.com', [send_mail, ], MailWithFile.as_string())
# 退出账户
NowServer.quit()
return True
except Exception as e:
log.error(e)
return False
- 主方法
if __name__ == '__main__':
import os, sys
# 解决中文乱码问题
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
log.info("request param %s %s", sys.argv[1],sys.argv[2])
file_name = getData(sql_string=sys.argv[1])
log.info("start sending mail")
if send_mail(file_name, sys.argv[2]):
log.info("Mail sent successfully")
else:
log.error("Email sending failed")
- 执行命令
- 打开终端,找到此脚本文件目录,输入python3 脚本名 '参数值1' '参数值2'
- 配置日志(放在最外部)
import logging
# 日志配置
logging.basicConfig()
log = logging.getLogger('export_data')
log.setLevel(logging.INFO)
log.propagate = True
- 其它导出(待补充)