Python数据库查询和邮件发送脚本

假设你是一位数据分析师,每天早上需要查询公司数据库中的数据,并将结果发送给多位同事。在过去,你可能需要手动执行这些任务,但现在你可以通过编写Python脚本来自动完成这些工作。

准备工作

在开始之前,确保你已经完成以下准备工作:

  1. 安装必要的Python库:确保你已经安装了pandassqlalchemysmtplib等必要的Python库。

  2. 配置数据库连接信息:将数据库连接信息(主机地址、端口、用户名、密码和数据库名称)保存在db_config字典中。

  3. 配置邮箱信息:将邮箱配置信息(SMTP服务器、SMTP端口、发件人邮箱、发件人密码以及接收人邮箱列表)保存在email_config字典中。

优化Python脚本

下面是如何优化Python脚本的步骤:

1. 导入必要的库

首先,导入脚本所需的库。

import time
import urllib
import schedule
import sqlalchemy
import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime

2. 配置数据库连接和邮箱信息

将数据库连接和邮箱信息保存在相应的字典中,确保密码等敏感信息已进行编码,以防止特殊字符引发的问题。

# 配置数据库连接
db_config = {
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': urllib.parse.quote("your_password_here"),
    'database': 'databasename'
}

# 配置邮箱信息
email_config = {
    'smtp_server': 'smtp.qq.com',
    'smtp_port': 465,
    'sender_email': 'your_sender_email@example.com',
    'sender_password': 'your_sender_password_here',
    'receiver_emails': ['recipient1@example.com', 'recipient2@example.com']
}

3. 创建数据库查询邮件发送函数

创建一个函数 query_and_send_email(),该函数负责执行数据库查询和发送邮件的操作。在函数内部,你可以执行多个数据库查询并将结果添加到邮件正文中。

def query_and_send_email():
    try:
        # 创建数据库连接
        engine = sqlalchemy.create_engine(
            f"mysql+pymysql://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}"
        )

        # 执行数据库查询,获取数据
        query_ak = "SELECT * FROM 表1"
        df_ak = pd.read_sql(query_ak, engine)

        query_bbc = "SELECT * FROM 表2"
        df_bbc = pd.read_sql(query_bbc, engine)

        query_bbd = "SELECT * FROM 表3"
        df_bbd = pd.read_sql(query_bbd, engine)

        # 获取当前日期
        current_date = datetime.now().strftime("%Y-%m-%d")

        # 构建邮件内容
        subject = f"数据库查询结果 - {current_date}"
        message = MIMEMultipart()
        message['Subject'] = subject
        message['From'] = email_config['sender_email']
        message['To'] = ', '.join(email_config['receiver_emails'])

        # 将数据添加到邮件正文中
        html_content = f"<h1>数据查询结果 - 统计及汇总-{current_date}</h1>" + df_ak.to_html() + "<br><br>" \
                        + f"<h1>数据查询结果 - 数据统计-{current_date}</h1>" + df_bbc.to_html()+ "<br><br>" +\
                        f"<h1>数据查询结果 - 注册统计(上月+上周+昨日+今日+7日+30日)-{current_date}</h1>" + df_bbd.to_html()
        message.attach(MIMEText(html_content, 'html'))

        # 发送邮件
        with smtplib.SMTP_SSL(email_config['smtp_server'], email_config['smtp_port']) as server:
            server.login(email_config['sender_email'], email_config['sender_password'])
            server.sendmail(email_config['sender_email'], email_config['receiver_emails'], message.as_string())
        print("邮件发送成功!")
    except Exception as e:
        print("发生错误:", e)

4. 调用函数执行任务

最后,调用 query_and_send_email() 函数执行数据库查询和邮件发送任务。如果你想要定时执行任务,可以使用 schedule 库来安排定时任务。

# 调用函数直接执行发送
query_and_send_email()

# 如果需要定时执行任务,取消下面的注释
# schedule.every().day.at("08:00").do(query_and_send_email)  # 每天早上8点发送

# 循环执行定时任务
# while True:
#     schedule.run_pending()
#     time.sleep(1)

通过以上步骤,你可以轻松优化Python脚本,实现数据库查询和邮件发送的自动化操作,从而提高工作效率。

结语

本文介绍了如何优化Python脚本,实现数据库查询和邮件发送的自动化操作。通过合理配置数据库连接信息和邮箱信息,以及编写相应的函数,你可以轻松完成这些任务。希望本文对你在日常工作中的自动化需求有所帮助。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:Python数据库查询和邮件发送脚本

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月23日
下一篇 2023年9月23日

相关推荐

  • 如何使用Python批量复制文件并按照规则整理

    你是否曾经遇到过这样的情景:你有一堆文件需要整理,按照一定的规则复制到不同的文件夹中,但手动复制会耗费大量的时间和精力。或者你需要将文件按照日期、类型或其他条件进行分类整理,但不知道如何批量处理它们…

    2023年9月27日
    00
  • 揭秘交易情绪分析:你的成功交易利器

    你是否曾想过,在投资和交易的旅程中,能够洞察市场情绪的变化,从而更明智地做出决策?交易情绪分析正是这个领域的一颗璀璨明珠,它利用自然语言处理和机器学习技术,帮助你解读市场的情感波动,无论是乐观、悲观…

    2023年9月27日
    00
  • 如何使用Gradio构建机器学习Web应用

    你好,亲爱的读者们!今天,我将向你们介绍一个强大的Python库,它可以让你在几分钟内构建出令人印象深刻的机器学习Web应用。无需深厚的编程知识,Gradio将成为你的得力助手,助你将机器学习模型和数据科学工作流变…

    2023年9月28日
    00
  • 从Mac到Windows:在不同架构下运行Python脚本的终极指南

    大家好,我是王大神,欢迎来到我的AI技术博客。今天我将与你分享一篇独特的教程,讨论如何将在Mac上编写的Python脚本转化成在Windows x86_64架构上运行的可执行文件。或许你也会遇到过这样的情况,你的Mac电脑只支…

    2023年9月19日
    00
  • 如何使用Python获取局域网内的IP与MAC地址

    当我和一群朋友一起参加一场网络游戏对战时,有一个问题开始困扰我们:如何确保只有我们这群朋友在局域网内?我们想知道是否有其他人也连接到了我们的网络。一个念头突然冒出来,为什么不使用Python来检测局域网内…

    2023年10月10日
    00
  • 如何使用Python爬取豆瓣电影Top250的电影海报

    作为一位电影爱好者,你可能经常关注豆瓣电影上的Top250电影榜单,想要了解哪些电影备受推崇。而且,你可能也希望将一些你喜欢的电影的海报保存下来,以便日后欣赏或分享。但是,手动一个一个点击电影,然后下载海…

    2023年9月21日
    00
  • 编程的奇妙之旅:Python多线程爬虫下载PDF教材

    有一天,当我坐在电脑前,思考着编程的奇妙之处时,一种冒险的感觉涌上心头。我想,为什么不用编程来探索互联网的深处,下载一些有趣的教材呢?于是,我开始了这次奇妙的编程之旅,带着好奇心和激情,我将向你展示…

    2023年10月4日
    00
  • 如何打造你自己的Python学生管理系统:简单、高效、实用!

    记得刚学会编程的那段日子吗?最开始,我们就像一个空白的画布,对这个充满可能性的世界充满好奇。但随着时间的推移,你可能会发现自己陷入了一种单调乏味的状态——总是在做一些重复的任务,比如管理数据、整理文件…

    2023年9月24日
    00
  • 从汇率到Python:如何查询和换算港币对人民币汇率

    有一天,小明计划去香港旅游,但他对港币对人民币的汇率一无所知。他不想在旅行中被坑,所以决定学习如何查询和换算港币对人民币的汇率。在他的学习过程中,他发现了Python这个有趣的工具,可以帮助他轻松查询汇率…

    2023年10月20日
    00
  • 掌握Python字典:你的数据存储和处理好帮手

    在编程世界中,字典(Dictionary)是一种强大的数据结构,可以帮助你高效地存储和处理各种数据。无论你是初学者还是经验丰富的开发者,了解和掌握字典都是至关重要的。本文将带你深入了解Python字典,包括如何创建…

    2023年9月19日
    00