`

使用python查询数据库及将数据写入cxcel文件,发送邮件

阅读更多
# !/usr/bin/python
# -*- coding:utf-8 -*-

import MySQLdb
import time, datetime
from openpyxl import Workbook

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

query_sql = """ SELECT d.project_id,d.project_name,
 d.end_time,
 u.username,d.target_user,
 u.real_name,
 u.email,
 u.phone,
 u.company
 FROM t_data_push_record_table d
 LEFT JOIN t_user u
 ON d.target_user = u.id
 WHERE d.target_user NOT IN('8a828b81612cff980161415a9957000c','8a817f674d663d1e014d7aec4a2b52f2') AND d.push_state='success' AND d.target_path IS NOT NULL AND d.start_time BETWEEN %s AND %s AND d.app_type IS NOT NULL AND d.type='project' ORDER BY d.start_time DESC;"""
table_head = ["project_id", "project_name", "推送时间", "username", "target_user", "姓名", "邮箱", "电话", "单位"]
sender_config = ["457455@163.com", "smtp.263.net", "123456"]
receivers = ['email1', 'email2']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
export_file_path = "/opt/push_project_data.xls"
'''
  获取数据库链接,查询相关数据
'''


def get_sql_connection(start_time, end_time):
    try:
        db = MySQLdb.connect("localhost", "dev_cloud", "dev_cloud.123", "dev_cloud", charset='utf8')
        cursor = db.cursor()
        sql = "\n" + query_sql % (start_time, end_time)
        cursor.execute(sql)
        results = cursor.fetchall()
        db.close()
        return results
    except:
        print '''Error: query sql is fail'''
    return None


def write_result_to_content(results):
    if results is None:
        return
    print '''create workbook excel file'''
    wb = Workbook()
    sheet = wb.create_sheet('data', index=1)
    sheet.append(table_head)
    print len(results)
    for result in results:
        sheet.append(result)
    wb.save(export_file_path)


def deal_time(days):
    now_time = datetime.datetime.now()
    delta_time = datetime.timedelta(days=days)
    start_time = now_time + delta_time
    return "'" + start_time.strftime("%y-%m-%d") + "'"


def email_config():
    message = MIMEMultipart()
    message['From'] = Header("biocloud", "utf-8")
    message['to'] = Header("biocloud", "utf-8")
    subject = '本周项目推送情况统计'
    message['subject'] = Header(subject, 'utf-8')

    message.attach(MIMEText('附件为本周项目推送情况统计,请查看!', 'plain', 'utf-8'))

    att = MIMEText(open(export_file_path, 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="项目推送统计.xls"'
    message.attach(att)
    return message


def send_email(message):
    try:
        smtpObj = smtplib.SMTP(sender_config[1])
        smtpObj.login(sender_config[0], sender_config[2])
        smtpObj.sendmail(sender_config[0], receivers, message.as_string())
        print '''邮件发送成功'''
        return True
    except smtplib.SMTPException:
        print '''Error: 无法发送邮件'''
        return False


if __name__ == '__main__':
    if time.strftime("%w", time.localtime()) == "2":
        now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        results = get_sql_connection(deal_time(-20), "'" + now_time + "'")
        write_result_to_content(results)
        message = email_config()
        if send_email(message) is False:
            time.sleep(5)
            send_email(message)

 

分享到:
评论

相关推荐

    汽车车型数据库SQL(excel)

    【车型数据库SQL(excel)】是一个包含当前市场上最新汽车车型信息的综合数据库,它结合了SQL数据文件和Excel电子表格,为用户提供了一种方便的方式来管理和分析汽车行业的详细数据。这个数据库可能涵盖了各种关键数据...

    cfg设计cxcel

    CFG桩设计校核使用,可以估算使用正方形布桩或者三角形布桩的置换率,检验手算的正确性及置换率等!

    74HC系列芯片Cxcel版本

    包含三百多种74HC系列芯片作用以及对应型号

    EXCEL 重复行表达式

    然而,随着数据规模的增大,简单的`COUNTIF`函数可能无法满足所有的需求,这时就需要结合更多的Excel函数和技巧,甚至考虑使用更强大的数据处理工具如Power Query或编写VBA宏来提高效率和功能。总之,灵活运用Excel...

    不同密码显示不同的excel的sheet页

    2、vba编程入口需要口令才能进入 3、基于口令打开,再关闭excel之后,重新打开,要跟要求1的效果一样 4、跨软件打开要求实现一样的效果,比如用wps打开,如果不能输入口令,那么也不能展示其他的sheet ...

    Excel基础操作系列全集

    资源名称:Excel 基础操作系列全集资源目录:【】1.复制粘贴_PDF【】1.复制粘贴_Video【】2.字体格式与自定义格式_PDF【】2.字体格式与自定义格式_Video【】3.条件格式_PDF【】3.条件格式_Video【】4....

    CP、CPK、PP、PPK、CMK的计算公式过程能力指数公式

    需要注意的是,虽然上述公式和计算方法为我们提供了一套系统性的方法来评估和分析过程能力,但在实际操作中,数据的收集、处理以及公差的确定都应遵循严格的统计原则和实际生产经验。此外,当过程能力指数低于预期时...

    excel2010 180511

    Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在...

    Excel表格+Word文档各类各行业模板-城镇维护建设资金收入.xls

    Excel表格+Word文档各类各行业模板-城镇维护建设资金收入.xls

    excel不确定性计算

    在“不确定性计算过程.xls”文件中,你可能找到了具体的操作步骤和案例,包括数据输入、公式应用、图表生成等,这将有助于你直观地理解每种方法的运用。在实际操作时,务必确保数据的准确性和完整性,因为任何输入...

    根据列序号生成excel英文列名

    根据列序号生成excel的英文列名,如 26对应AA,自己用了1个上午写的,自我感觉很良好偶。哈哈。

    初学者必会的excel快捷键

    35. **Ctrl+R**:使用“向右填充”功能,将左边单元格的内容和格式复制到右边的单元格。 36. **Ctrl+S**:保存当前工作簿。 37. **Ctrl+X**:剪切选定的单元格。 38. **Ctrl+W**:关闭当前工作簿。 39. **F1**:...

Global site tag (gtag.js) - Google Analytics