Python整合SQLite搭建一个轻量级账本应用
目录
- 本文目标
- 一、数据库设计
- 二、初始化数据库(init_db.py)
- 三、添加收支记录(add.py)
- 四、查询总览 & 统计(view.py)
- 五、进阶:按月份或分类过滤查询(filter.py)
- 使用演示
- 拓展挑战
想记账,但不想用冗杂 App?这篇带你用 python 和 SQLite 快速打造一个能记录收支、统计余额、按月查询的本地账本工具,轻便、够用、可扩展!
本文目标
- 用
sqlite3
构建账本数据库 - 支持新增收支、查询记录、统计总额
- 打造命令行交互式账本工具
- 实现按月过滤和类型筛选
一、数据库设计
创建一张records表
CREATE TABLE records ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, 编程客栈-- 收入 / 支出 category TEXT NOT NULL, -- 分类(工资、餐饮、交php通等) amount REAL NOT NULL, -- 金额 note TEXT, -- 备注 date TEXT NOT NULL -- 日期(YYYY-MM-DD) )
二、初始化数据库(init_db.py)
import sqlite3js conn = sqlite3.connect("ledger.db") cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS records ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, category TEXT NOT NULL, amount REAL NOT NULL, note TEXT, date TEXT NOT NULL ) """) conn.commit() conn.close() print("✅ 数据库初始化完成")
运行一次:
python init_db.py
三、添加收支记录(add.py)
import sqlite3 from datetime import datetime def add_record(): rtype = input("类型(收入/支出):") category = input("分类(工资/餐饮等):") amount = float(input("金额:")) note = input("备注(可选):") date = input("日期(默认今天,回车跳过):") or datetime.now().strftime("%Y-%m-%d") conn = sqlite3.connect("ledger.db") cursor = conn.cursor() cursor.execute(""" INSERT INTO records (type, category, amount, note, date) VALUES (?, ?, ?, ?, ?) """, (rtype, category, amount, note, date)) conn.commit() conn.close() print("✅ 记录添加成功") if __name__ == "__main__": add_record()
四、查询总览 & 统计(view.py)
import sqlite3 def list_records(): conn = sqlite3.connect("ledger.db") cursor = conn.cursor() cursor.execute("SELECT * FROM records ORDER BY date DESC") rows = cursor.fetchall() total_income = 0 total_expense = 0 for row in rows: id, rtype, cat, amt, note, date = row print(f"{id}. [{rtype}] {cat} {amt} - {note} ({date})") if rtype == "收入": total_income += amt else: total_expense += amt balance = total_income - total_expense print(f"\n 收入总计:{total_incomeaLJpPTHJBe:.2f}") print(f" 支出总计:{total_expense:.2f}") print(f" 当前余额:{balance:.2f}") conn.close() if __name__ == "__main__": list_records()
五、进阶:按月js份或分类过滤查询(filter.py)
import sqlite3 def filter_by_month(month): # 格式:2025-07 conn = sqlite3.connect("ledger.db") cursor = conn.cursor() cursor.execute(""" SELECT * FROM records WHERE date LIKE ? ORDER BY date DESC """, (f"{month}%",)) for row in cursor.fetchall(): print(row) conn.close() filter_by_month("2025-07")
使用演示
python add.py # 添加记录 python view.py # 查看总览 python filter.py # 按月过滤
拓展挑战
- 使用
argparse
实现ledger.py add/view/filter
多命令工具 - 导出账单为 CSV、Excel
- 添加分类分析图表(搭配
matplotlib
)
总结
SQLite 是个人项目和轻量应用最值得掌握的数据库,能存、能查、免服务、易扩展,完美适配一切“小而美”场景。
到此这篇关于Python整合SQLite搭建一个轻量级账本应用的文章就介绍到这了,更多相关Python账本应用内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论