Flask · Excel 导出
1. 导入工具
from flask import Flask, send_from_directory
from db import query_data
import openpyxl
import os
from datetime import datetime
app = Flask(__name__)
- Flask 框架 + 文件下载
- query_data 从 db.py 查询
- openpyxl 操作 Excel
- datetime 给文件命名
2. 下载文件夹
DOWNLOAD_DIR = 'downloads'
if not os.path.exists(DOWNLOAD_DIR):
os.makedirs(DOWNLOAD_DIR)
自动创建 downloads/ 目录,存放生成的 Excel。
3. 创建Excel函数 核心
create_excel(data, table_name='user')
— 把数据变成 Excel 文件,保存到硬盘。
3.1 新建工作簿 & 表头
wb = openpyxl.Workbook()
ws = wb.active
headers = list(data[0].keys())
for col, header in enumerate(headers, start=1):
ws.cell(row=1, column=col, value=header)
- 用 data[0].keys() 自动提取表头
- 写入第1行(列名)
3.2 写入数据行
for row_idx, row in enumerate(data, start=2):
for col_idx, header in enumerate(headers, start=1):
ws.cell(row=row_idx, column=col_idx, value=row[header])
- 外层循环:每条数据 → 一行
- 内层循环:每个字段 → 一列
- row[header] 从字典取值
3.3 保存文件
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f'{table_name}_{timestamp}.xlsx'
filepath = os.path.join(DOWNLOAD_DIR, filename)
wb.save(filepath)
return filename
- 时间戳 20260902_143022
- 文件名如 user_20260902_143022.xlsx
4. 下载路由
@app.route('/download')
def download():
data = query_data("SELECT * FROM user")
filename = create_excel(data, 'user')
return send_from_directory(DOWNLOAD_DIR, filename, as_attachment=True)
- 从数据库查数据
- 调用 create_excel 生成文件
- send_from_directory 强制下载
5. 启动程序
if __name__ == '__main__':
app.run(debug=True)
- 运行 Flask,debug 模式
- 访问 http://localhost:5000/download 即可下载
数据流 · 一目了然
db.query_data() → 字典列表
create_excel() 生成 .xlsx
保存到 downloads/
用户下载
比喻 · 工厂流水线
query_data 是原料仓 → create_excel 是加工车间 →
send_from_directory 是发货口。每个环节各司其职。
常见问题 · 小贴士
- 如果 data 为空,data[0] 会报错 — 可加判断
- 每次下载生成新文件,不会覆盖旧文件
- downloads/ 文件夹需要写入权限