当前位置: 首页 > article >正文

我用 DuckDB + Python 搭了个全自动日报系统:68 行代码,7 个踩坑实录

# 我用 DuckDB Python 搭了个全自动日报系统68 行代码7 个踩坑实录 总周期3 天业余时间每天下班 2 小时 总成本≈ 服务器 ¥29/月已有 技术栈DuckDB Python cron SMTP 代码量68 行 Python 结果每天 8:00 自动出日报老板手机收邮件30 秒看完本文给到完整可跑代码、7 个深坑清单、方案对比表、技术选型思路。---## 一、为什么是 DuckDB Python而不是 BI 工具接了个小活。朋友开连锁便利店6 家分店每天店长手工汇总 Excel。Excel 里 12 个 Sheet公式多到打开要卡 5 秒。每个月花在「做日报」上的人力成本超过 3000 块。他问能不能自动化我列了 3 个方案| 方案 | 月成本 | 部署周期 | 维护成本 | 我的判断 ||------|--------|---------|---------|---------|| Tableau / Power BI | ¥2000-5000 | 1-2 周 | 高要专人维护 | 杀鸡用牛刀 || 定制开发Spring Boot MySQL | ¥10000 | 1 个月 | 高要迭代 | 周期太长 || DuckDB Python cron | ¥500 | 3 天 | 零 | ✅ 选它 |选 DuckDB 的核心原因**嵌入式、零运维、SQL 就够用**。不需要搭数据库服务不需要配权限系统一个 .py 文件就是全部。## 二、技术栈选型| 组件 | 选型 | 理由 ||------|------|------|| 计算引擎 | DuckDB 1.1.x | 嵌入式 OLAP单文件数据库SQL 原生支持窗口函数 || 脚本语言 | Python 3.11 | cron 调度友好生态丰富 || 报告格式 | HTML 邮件 | 老板手机直接看不要下载附件 || 推送方式 | SMTP QQ邮箱 | 免费、稳定、不需要额外服务 || 定时调度 | Linux cron | 系统自带零依赖 || 数据格式 | CSV | 客户 POS 系统直接导出不需要 ETL |### 为什么不用 Pandas不是 Pandas 不好而是对这类场景有以下问题1. **内存依赖** — 如果几个月的数据累积到 GB 级别Pandas 过一遍就卡了2. **可读性** — 同样的分析DuckDB 一行 SQLPandas 可能要 10 行3. **增量更新麻烦** — Pandas 做增量追加要在代码里手动管理DuckDB 直接 INSERT OR REPLACE一行搞定。## 三、核心代码68 行复制即用python#!/usr/bin/env python3DuckDB 全自动日报系统每天 8:00 cron 执行老板手机收邮件import duckdbimport smtplibimport osfrom datetime import datetime, timedeltafrom email.mime.text import MIMEText# 配置区 DB_PATH daily_report.duckdbDATA_DIR dataSMTP_HOST smtp.qq.comSMTP_PORT 465SMTP_USER yourqq.comSMTP_PASS your_smtp_auth_code # QQ邮箱 → 设置 → 账户 → 生成授权码RECIPIENTS [bosscompany.com]# def load_and_analyze():con duckdb.connect(DB_PATH)# 1. 建表如果不存在— DuckDB 的 CREATE TABLE IF NOT EXISTScon.execute(CREATE TABLE IF NOT EXISTS daily_sales (order_id VARCHAR PRIMARY KEY,order_date DATE,store VARCHAR,category VARCHAR,total_amount DOUBLE,cost DOUBLE))# 2. 扫描 data/ 下的新 CSV 文件增量插入for f in os.listdir(DATA_DIR):if not f.endswith(.csv):continuepath os.path.join(DATA_DIR, f)# 用 DuckDB 直接读 CSV比 Pandas 快con.execute(fINSERT OR REPLACE INTO daily_salesSELECT * FROM read_csv_auto({path}))# 移走已处理文件防止重复os.rename(path, path .done)# 3. 一站式分析一条 SQL 算 6 个核心 KPIreport con.execute(SELECTstrftime(order_date, %Y-%m-%d) as day,store,COUNT(*) as order_count,ROUND(SUM(total_amount), 2) as revenue,ROUND(SUM(total_amount - cost), 2) as profit,ROUND(AVG(total_amount), 2) as avg_orderFROM daily_salesWHERE order_date CURRENT_DATE - INTERVAL 7 daysGROUP BY day, storeORDER BY day DESC, revenue DESC).fetchdf()con.close()return reportdef send_email(report_df):# 生成 HTML 表格table_html report_df.to_html(indexFalse, classesreport-table)today datetime.now().strftime(%Y-%m-%d)html fhtmlbody stylefont-family: -apple-system, sans-serif; padding: 20px;h2 每日经营日报 · {today}/h2{table_html}p stylecolor: #666; font-size: 12px; margin-top: 20px;自动生成 | DuckDB Python | 如有问题回复此邮件/p/body/html

相关文章:

我用 DuckDB + Python 搭了个全自动日报系统:68 行代码,7 个踩坑实录

# 我用 DuckDB Python 搭了个全自动日报系统:68 行代码,7 个踩坑实录> 总周期:3 天业余时间(每天下班 2 小时) > 总成本:≈ 服务器 29/月(已有) > 技术栈:Duck…...

昇腾CANN ops-blas:GEMM 在 NPU 上为什么可以快到极致

矩阵乘是所有深度学习计算的根。Attention、全连接、卷积展开——归根到底都是矩阵乘。ops-blas 是 CANN 里专门做高性能 GEMM(General Matrix Multiply)的算子库,核心目标是把昇腾 NPU 的 Cube 单元利用率拉到 90% 以上。 ops-blas 和 ops-n…...

DeepSeek服务网格选型决策树(Istio vs. eBPF轻量方案深度对比:延迟压降42%、资源开销降低68%实测数据)

更多请点击: https://intelliparadigm.com 第一章:DeepSeek微服务架构建议 在构建面向大语言模型推理与训练任务的微服务系统时,DeepSeek系列模型对计算密集型服务、高吞吐API网关及弹性资源编排提出了明确要求。推荐采用分层解耦、异步协同…...

【ElevenLabs云南话语音落地实战】:20年语音AI专家亲授3步适配方言模型,避开92%开发者踩过的声学对齐陷阱

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs云南话语音落地实战导论 云南话作为西南官话的重要分支,具有声调丰富、语流连贯、地域变体多样等特点,为语音合成技术带来独特挑战。ElevenLabs 提供的多语言、高保真…...

用 5 款全栈电商微系统打通你的前后端核心逻辑链路(附级联 Prompt)

各位大前端、全栈开发以及正在寻求技术进阶的同仁们,大家好。在日常的技术社区里,我们经常能看到各种流于表面的前端 UI 静态页或者几行代码拼凑的后端 CRUD 示例。但真正能在一个全栈工程师的履历中起到定海神针作用的,往往是那些功能内敛、…...

恩智浦eIQ Time Series Studio:嵌入式时间序列AI从数据到部署的自动化实践

1. 项目概述与核心价值如果你正在为嵌入式设备开发一个基于传感器数据的智能功能,比如通过振动信号判断电机是否故障,或者通过电流波形识别家电的工作模式,你大概率会面临一个经典困境:算法模型在PC上跑得好好的,一到资…...

端侧AI与嵌入式系统融合:从模型轻量化到5G通信的产业化落地

1. 从展会看趋势:端侧AI与嵌入式系统的深度融合最近在德国纽伦堡举办的国际嵌入式展览会,可以说是全球嵌入式技术发展的风向标。作为从业者,我每年都会关注这个展会,因为它总能揭示未来几年工业和技术应用的核心走向。今年&#x…...

告别键盘连击烦恼:Keyboard Chatter Blocker终极使用指南

告别键盘连击烦恼:Keyboard Chatter Blocker终极使用指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否经常在打字时…...

拒绝玩具CRUD:用 5 款全栈离线“仓储管理”微系统精通前后端解耦(附专家级级联 Prompt)

各位全栈同仁、大前端极客以及正在突破技术瓶颈的开发者们,大家好。作为一名每天和分布式架构、数据库事务以及前端复杂状态流打交道的工程师,今天想和大家聊聊全栈工程落地中的“咬合力”。在很多技术社区里,大家往往能看到各种速成的单表 C…...

SPT-AKI存档编辑器:掌控离线塔科夫游戏进度的终极工具

SPT-AKI存档编辑器:掌控离线塔科夫游戏进度的终极工具 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirrors/s…...

终极游戏模组管理指南:Nexus Mods App如何让你轻松玩转模组世界

终极游戏模组管理指南:Nexus Mods App如何让你轻松玩转模组世界 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 厌倦了手动安装模组时的各种冲突和兼容性问题&a…...

如何快速搭建个人游戏串流服务器:Sunshine跨平台游戏流媒体完整指南

如何快速搭建个人游戏串流服务器:Sunshine跨平台游戏流媒体完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏?Sunshine游…...

3小时变3分钟:用ChanlunX插件让通达信自动绘制缠论结构

3小时变3分钟:用ChanlunX插件让通达信自动绘制缠论结构 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的K线图,试图手工画出缠论中的笔、线段和中枢&#xff0…...

MultiHighlight插件深度解析:JetBrains IDE智能代码高亮实战指南

MultiHighlight插件深度解析:JetBrains IDE智能代码高亮实战指南 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors 🎨💡 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight …...

KMS智能激活终极指南:一键永久激活Windows和Office的完整教程

KMS智能激活终极指南:一键永久激活Windows和Office的完整教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然…...

Vanrafia阿曲生坦Atrasentan副作用贫血及头痛严重时如何治疗?

贫血与头痛是Vanrafia阿曲生坦治疗IgA肾病时最受临床关注的两项全身性不良反应。贫血侵蚀着患者的日常功能与运动耐量,头痛则是最常见的神经系统不适主诉。ALIGN三期临床试验及其长期扩展研究的完整安全性数据,为这两项副作用勾勒出了精确且不容回避的风…...

论文重复率过高,应该怎么办?

重复率过高,先别急着全文重写。大多数情况,不是整篇都有问题,而是少数几个章节把总重复率拉爆了。很多人第一反应是“从头改到尾”。这个最累,而且效率最低。正确顺序是这样的。第一步:先看是哪一部分高,不…...

免费卸载软件再推荐!支持多款软件同时卸载、注册表清理、垃圾文件清理、空文件查找、进程管理、启动管理等等功能!强制卸载+系统清理,绝了

前言 电脑里总有那么几个“钉子户”软件!卸载按钮灰色、控制面板里找不到、残留注册表像牛皮癣一样反复出现今天推荐的这款卸载工具,不管程序多顽固、卸载器多残废,都能一键连根拔起,顺带把垃圾文件、空文件夹、无效快捷方式打包带走&#x…...

扫描(SEM)-透射(TEM)-原子力(AFM)的比较

SEM: 扫描电子显微镜扫描电镜成像是利用细聚焦高能电子束在样件表面激发各种物理信号,如二次电子、背散射电子等,通过相应的检测器来检测这些信号,信号的强度与样品表面形貌有一定的对应关系,因此,可将其转…...

扫描电镜(SEM)会产生哪些信号?

当高能电子束与样品相互作用时&#xff0c;会产生多种类型的信号。这些信号提供了有关材料表面形貌、成分和结构的关键信息。1.二次电子&#xff08;SE&#xff09;是入射电子将样品表面附近原子中的低能电子激发出来的。它们携带表面敏感信息&#xff08;深度<10 nm&#x…...

ArcGIS Pro 基础:县级人口图斑分级设色显示

首先确定图斑数据和属性数据&#xff0c;如下&#xff1a;对图层名称进行修改。右键图层属性&#xff0c;对常规里的名称进行修改。右键图层&#xff0c;打开【符号系统】。【主符号系统】选择【分级色彩】&#xff1b;【归一化】选择【无】&#xff1b;【方法】选择【自然间断…...

Jetpack Compose 动画使用指南

Jetpack Compose 动画使用指南 ⚡ 快速上手 Compose 动画&#xff0c;6 大核心 API 结合项目&#xff1a;仓库地址 目录 animate*AsState — 最基础的动画AnimatedVisibility — 显示/隐藏动画updateTransition — 多值协同过渡Crossfade — 页面/内容切换AnimatedContent —…...

Python数据库迁移实战:从SQLAlchemy到Alembic的完整指南

Python数据库迁移实战&#xff1a;从SQLAlchemy到Alembic的完整指南 引言 数据库迁移是后端开发中不可或缺的一部分。作为从Python转向Rust的后端开发者&#xff0c;我发现Python的数据库迁移工具非常成熟&#xff0c;尤其是Alembic配合SQLAlchemy的组合。本文将从实战角度出发…...

GESP6级C++考试语法知识(二十五、深度优先搜索(五、DFS终极奥义))

⚔️第五课《DFS终极奥义》——原来算法世界到处都是 DFS&#xff01;&#x1f31f;一、故事开始&#xff1a;算法圣殿1、经过前四课。小骑士 DFS 已经成为了&#xff1a;&#x1f31f;DFS 小勇者&#xff01;2、但是。算法王国最深处。还有一座&#xff1a;&#x1f31f;“dfs…...

职教高考及高职分类招生控制线 API 接口

职教高考及高职分类招生控制线 API 接口 接口详情官网地址: https://www.gugudata.com/api/details/vocationalcontrollines 职教高考及高职分类招生控制线 API 支持查询职教高考及高职分类招生控制线数据&#xff0c;覆盖年份、省份、招生类别、考生类型、录取批次和科类等筛…...

写给前端的 CANN-ops-rand:昇腾随机数生成算子库到底是啥?

之前做强化学习&#xff0c;兄弟问我&#xff1a;“哥&#xff0c;我想在昇腾上做蒙特卡洛模拟&#xff0c;随机数生成有现成的库吗&#xff1f;” 好问题。今天一次说清楚。 ops-rand 是啥&#xff1f; ops-rand Operations for Random&#xff0c;昇腾随机数生成算子库。 一…...

【CDA干货】用这4种数据分析思维,拆解爆款视频密码

很多做视频的人&#xff0c;发视频全凭感觉。今天视频火了&#xff0c;不知道为什么&#xff1b;明天流量掉了&#xff0c;也不知道哪里出了问题。其实&#xff0c;爆款背后从来不是运气&#xff0c;而是数据的逻辑。用数据分析思维做视频账号&#xff0c;就是把那些说不清道不…...

对比直接购买,使用Taotoken的Token Plan套餐如何节省API成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接购买&#xff0c;使用Taotoken的Token Plan套餐如何节省API成本 1. 成本管理中的常见挑战 对于需要持续调用大模型API的开…...

web服务器的实验(RHCE)

web服务器的实验&#xff08;RHCE&#xff09; 实验目录 ​ 实验1&#xff1a;快速搭建一个网站 ​ 实验2&#xff1a;替换网页目录 ​ 实验3&#xff1a;搭建网站使用内网穿透 ​ 实验4&#xff1a;搭建密码验证功能来访问网站数据 ​ 实验5&#xff1a;新建文件目录列表的网站…...

Louvain 算法:让网络自己“报团取暖”的发现者

&#x1f9e9; Louvain 算法&#xff1a;让网络自己“报团取暖”的发现者为什么你的朋友圈会自然分成老同学、同事和游戏好友&#xff1f;Louvain算法就是网路世界里的“社交侦探”&#xff0c;它能自动帮你看清整个网络中“谁和谁是一伙的”。一、从一个生活场景说起 &#x1…...