假设你是一位数据分析师,每天早上需要查询公司数据库中的数据,并将结果发送给多位同事。在过去,你可能需要手动执行这些任务,但现在你可以通过编写Python脚本来自动完成这些工作。
准备工作
在开始之前,确保你已经完成以下准备工作:
-
安装必要的Python库:确保你已经安装了
pandas
、sqlalchemy
和smtplib
等必要的Python库。 -
配置数据库连接信息:将数据库连接信息(主机地址、端口、用户名、密码和数据库名称)保存在
db_config
字典中。 -
配置邮箱信息:将邮箱配置信息(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脚本,实现数据库查询和邮件发送的自动化操作。通过合理配置数据库连接信息和邮箱信息,以及编写相应的函数,你可以轻松完成这些任务。希望本文对你在日常工作中的自动化需求有所帮助。