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

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

谷歌和百度对AI生成的网站内容的惩罚:真相揭秘

2023-9-23 0:36:42

指数词

小米用户专属:小爱同学大模型版安装教程

2023-9-23 8:36:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索