在企业日常数据运营中,经常需要把数据库里的业务数据按时统计出来,做成日报或周报。通过Python的pymysql库,我们可以编写脚本连接MySQL,自动跑SQL查询,并把结果输出为文件或邮件,再配合定时任务做到每天准时生成。

环境准备与库安装
首先确保本地或服务器已安装Python 3,然后使用pip安装pymysql和schedule两个库。pymysql负责数据库连接和查询,schedule用来在代码层做轻量级定时。
pip install pymysql schedule
使用pymysql连接数据库并执行查询
下面示例展示如何连接MySQL,执行一条统计SQL,并把结果打印出来。注意把密码和库名换成你自己的环境信息。
import pymysql
# 建立数据库连接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='your_password',
db='test_db',
charset='utf8mb4'
)
try:
# 获取游标
cursor = conn.cursor()
sql = 'SELECT COUNT(*) FROM orders WHERE create_time >= CURDATE()'
cursor.execute(sql)
result = cursor.fetchone()
print('今日订单数:', result[0])
finally:
cursor.close()
conn.close()
将查询结果生成简单报告
我们可以把查到的数据写成CSV文件,方便后续发送或归档。以下函数在上面的查询基础上做了扩展。
import csv
def save_report(data, file_path):
# data为列表,如[('今日订单数', 120)]
with open(file_path, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['指标', '数值'])
for row in data:
writer.writerow(row)
# 假设查得结果
save_report([('今日订单数', 120)], 'daily_report.csv')
用schedule实现定时任务
如果希望脚本每天上午九点自动跑一遍查询和写报告,可以用schedule库设置任务循环。配合while True让进程常驻即可。
import schedule
import time
def job():
# 这里调用前面的查询和保存逻辑
print('开始执行每日报表任务')
# run_query_and_save()
schedule.every().day.at('09:00').do(job)
while True:
schedule.run_pending()
time.sleep(60)
部署建议
除了在代码里用schedule,也可以把脚本交给系统的crontab(Linux)或任务计划程序(Windows)定时调用,这样不需要常驻进程。无论哪种方式,都建议在脚本中加上异常捕获和日志,避免任务失败无感知。
| 方式 | 优点 | 适用场景 |
|---|---|---|
| schedule库 | 纯Python实现,跨平台 | 简单常驻服务 |
| crontab | 系统级稳定,无需常驻 | 服务器环境 |
小结
通过pymysql执行SQL,加上文件输出和定时调度,就能用很低的成本完成自动化报告。实际项目中可再接入邮件发送或企业微信通知,让报表自动触达相关人员。