# !/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电子表格,为用户提供了一种方便的方式来管理和分析汽车行业的详细数据。这个数据库可能涵盖了各种关键数据...
CFG桩设计校核使用,可以估算使用正方形布桩或者三角形布桩的置换率,检验手算的正确性及置换率等!
包含三百多种74HC系列芯片作用以及对应型号
然而,随着数据规模的增大,简单的`COUNTIF`函数可能无法满足所有的需求,这时就需要结合更多的Excel函数和技巧,甚至考虑使用更强大的数据处理工具如Power Query或编写VBA宏来提高效率和功能。总之,灵活运用Excel...
2、vba编程入口需要口令才能进入 3、基于口令打开,再关闭excel之后,重新打开,要跟要求1的效果一样 4、跨软件打开要求实现一样的效果,比如用wps打开,如果不能输入口令,那么也不能展示其他的sheet ...
资源名称:Excel 基础操作系列全集资源目录:【】1.复制粘贴_PDF【】1.复制粘贴_Video【】2.字体格式与自定义格式_PDF【】2.字体格式与自定义格式_Video【】3.条件格式_PDF【】3.条件格式_Video【】4....
需要注意的是,虽然上述公式和计算方法为我们提供了一套系统性的方法来评估和分析过程能力,但在实际操作中,数据的收集、处理以及公差的确定都应遵循严格的统计原则和实际生产经验。此外,当过程能力指数低于预期时...
Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在...
Excel表格+Word文档各类各行业模板-城镇维护建设资金收入.xls
在“不确定性计算过程.xls”文件中,你可能找到了具体的操作步骤和案例,包括数据输入、公式应用、图表生成等,这将有助于你直观地理解每种方法的运用。在实际操作时,务必确保数据的准确性和完整性,因为任何输入...
根据列序号生成excel的英文列名,如 26对应AA,自己用了1个上午写的,自我感觉很良好偶。哈哈。
35. **Ctrl+R**:使用“向右填充”功能,将左边单元格的内容和格式复制到右边的单元格。 36. **Ctrl+S**:保存当前工作簿。 37. **Ctrl+X**:剪切选定的单元格。 38. **Ctrl+W**:关闭当前工作簿。 39. **F1**:...