环境:Linux +python2.7+mysql5.6

1、提前安装xlwt(excel写入操作模块),MySQLdb(mysql操作模块)

2、脚本如下:

#!/usr/bin/python
#coding: utf-8
import sys
import xlwt
import MySQLdb
import datetime
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os.path host = 'localhost'
user = 'user'
pwd = 'Passwd'
port = 3306
db = 'database'
sheet_name = 'report' + time.strftime("%Y-%m-%d")
filename = 'report_' + time.strftime("%Y-%m-%d") + '.xls'
out_path = '/data/monitor/temp/report_'+ time.strftime("%Y-%m-%d") + '.xls'
print(out_path)
sql = 'Select * from sys_user;'
def export():
conn = MySQLdb.connect(host,user,pwd,db,charset='utf8')
cursor = conn.cursor()
count = cursor.execute(sql)
print("查询出" + str(count) + "条记录")
if count>0:
#来重置游标的位置
cursor.scroll(0,mode='absolute')
#搜取所有结果
results = cursor.fetchall()
# 获取MYSQL里面的数据字段名称
fields = cursor.description
workbook = xlwt.Workbook(encoding = 'utf-8') # workbook是sheet赖以生存的载体。
sheet = workbook.add_sheet(sheet_name,cell_overwrite_ok=True)
# 写上字段信息
for field in range(0,len(fields)):
sheet.write(0,field,fields[field][0])
# 获取并写入数据段信息
row = 1
col = 0
for row in range(1,len(results)+1):
for col in range(0,len(fields)):
sheet.write(row,col,u'%s'%results[row-1][col])
workbook.save(out_path)
else:
print("无数据") _user = "XXXX@qq.com"
_pwd = "passwd"
areceiver = "xxxxx@139.com"
acc = "xxxxx@139.com" #如名字所示Multipart就是分多个部分
msg = MIMEMultipart()
msg["Subject"] =u'【数据统计_' + time.strftime("%Y-%m-%d") + u'】'
msg["From"] = _user
msg["To"] = areceiver
msg["Cc"] = acc def send_email():
conn = MySQLdb.connect(host,user,pwd,db,charset='utf8')
cursor = conn.cursor()
count = cursor.execute(sql)
#---这是文字部分---
content = '''Deal all,\n附件是系统每日统计情况,请查收!
总计结果数为:'''+str(count) part = MIMEText(content,'plain','utf-8')
msg.attach(part)
if count>0:
#---这是附件部分---
#xls类型附件
file_name = '/data/monitor/temp/' + filename
part = MIMEText(open(file_name,'rb').read(), 'base64', 'gb2312')
part["Content-Type"] = 'application/octet-stream'
basename = os.path.basename(file_name)
part["Content-Disposition"] = 'attachment; filename=%s' % basename.encode('gb2312')
msg.attach(part)
s = smtplib.SMTP("smtp.qq.com", timeout=30)#连接smtp邮件服务器,端口默认是25
s.login(_user, _pwd)#登陆服务器
s.sendmail(_user, areceiver.split(',') + acc.split(','), msg.as_string())#发送邮件
print("Email send successfully")
s.close()
else:
print("nothing to send!")
#调用函数
if __name__=="__main__":
export()
send_email()

  

[Python]查询mysql导出结果至Excel并发送邮件的更多相关文章

  1. [Python]查询oracle导出结果至Excel并发送邮件

    环境:Linux +python2.7+oracle11g 1.提前安装xlwt(excel写入操作模块),cx_Oracle(oracle操作模块) cx_Oracle的安装步骤详见链接:https ...

  2. [ES]Python查询ES导出数据为Excel

    版本 elasticsearch==5.5.0 python==3.7 说明 用python查询es上存储的状态数据,将查询到的数据用pandas处理成excel code # -*- coding: ...

  3. [python] 查询mysql返回datetime类型数据的处理

    Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题. 在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串. from dat ...

  4. Python查询Mysql时返回字典结构的代码

    Python查询Mysql时返回字典结构的代码 MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.D ...

  5. python查询mysql数据(3)

    python查询mysql数据(3) """数据查询""" import pymysql import datetime from pymy ...

  6. Python将MySQL表数据写入excel

    背景:将mysql表查询结果写入excel. 1.使用sqlyog工具将查询结果导出到Excel.xml中,用excel打开发现:因为text字段中有回车换行操作,显示结果行是乱的. 2.用mysql ...

  7. mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法

    Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...

  8. 解决Python查询Mysql中文乱码问题

    前段时间,自己瞎动手用Django写了一个更新zip包和sql到远程服务器的工具.但Python从Mysql中读取出来的中文字符会乱码,如下图: 解决办法:Python连接Mysql时指定charse ...

  9. python查询mysql并生成excel表

    需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...

随机推荐

  1. Django项目--在开发环境运行静态页面

    在项目中运行静态页面的准备工作: 开发中使用前端node.js 提供的live-server服务器作为前端开发服务器使用 linux终端中准备node环境 npm install -g live-se ...

  2. 在IDEA中将SpringBoot项目打包成jar包的方法

    SpringBoot项目无需依赖tomcat容器(内含)就可以发布,现在将打包步骤记录一下: 1. 打包前确认项目可以正常运行,打开Project Structure 快捷键 Ctrl+Shift+A ...

  3. 【Mysql】事务日志-Write Ahead logging vs command-logging(转)

    原理讲解: Write Ahead logging vs command logging Write Ahead logging 持久化数据保存在磁盘,数据的存储是随机的,并非顺序: 内存中保存磁盘数 ...

  4. PAT 乙级 1066 图像过滤(15) C++版

    1066. 图像过滤(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 图像过滤是把图像中不重要的像素都染成 ...

  5. [转][CentOS]修改IP后立即生效

    来自:http://bbs.51cto.com/thread-789908-1.html Linux系统里修改IP地址后该如何使之即刻生效,有两种方法可以解决: (1) sudo ifdown eth ...

  6. etcd 命令行(转)

    原文 https://www.cnblogs.com/breg/p/5756558.html 比较重要的配置 -name 节点名称,默认是UUID-data-dir 保存日志和快照的目录,默认为当前工 ...

  7. Hive深入学习--应用场景及架构原理

    Hive背景介绍 Hive最初是Facebook为了满足对海量社交网络数据的管理和机器学习的需求而产生和发展的.互联网现在进入了大数据时代,大数据是现在互联网的趋势,而hadoop就是大数据时代里的核 ...

  8. PyCharm的一些设置

    设置使用UTF-8 在任何情况下: 设置写python脚本,新建 脚本的时候默认加的头文件. # !/usr/bin/env python# -*- coding:utf-8 -*-# Author: ...

  9. 这个技术的出现,可能会颠覆阿里云、AWS!

    在大数据和人工智能的带动下,越来越多的大型公司开始争夺云服务市场这块香饽饽. AWS.阿里云.Azure,这些耳熟能详的云服务商依然牢牢占据着全球70%以上的市场,但是随着去年“区块链”这个领域的兴起 ...

  10. [UE4]角度和弧度

    1角度 = 一个圆周的1/360 1弧度 = 长度为半径的弧,其所对的圆心角