Python整合SQLite搭建一个轻量级账本应用

 更新时间:2025年07月08日 09:13:59   作者:金泽宸  
这篇文章为大家详细主要介绍了如何使用Python整合SQLite搭建一个轻量级账本应用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

想记账,但不想用冗杂 App?这篇带你用 Python 和 SQLite 快速打造一个能记录收支、统计余额、按月查询的本地账本工具,轻便、够用、可扩展!

本文目标

  • sqlite3 构建账本数据库
  • 支持新增收支、查询记录、统计总额
  • 打造命令行交互式账本工具
  • 实现按月过滤和类型筛选

一、数据库设计

创建一张records表

CREATE TABLE records (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    type TEXT NOT NULL,        -- 收入 / 支出
    category TEXT NOT NULL,    -- 分类(工资、餐饮、交通等)
    amount REAL NOT NULL,      -- 金额
    note TEXT,                 -- 备注
    date TEXT NOT NULL         -- 日期(YYYY-MM-DD)
)

二、初始化数据库(init_db.py)

import sqlite3

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_income:.2f}")
    print(f"📉 支出总计:¥{total_expense:.2f}")
    print(f"💰 当前余额:¥{balance:.2f}")

    conn.close()

if __name__ == "__main__":
    list_records()

五、进阶:按月份或分类过滤查询(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账本应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas 中对特征进行硬编码和onehot编码的实现

    pandas 中对特征进行硬编码和onehot编码的实现

    今天小编就为大家分享一篇pandas 中对特征进行硬编码和onehot编码的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用numpy.mean() 计算矩阵均值方式

    使用numpy.mean() 计算矩阵均值方式

    这篇文章主要介绍了numpy.mean() 计算矩阵均值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python使用PyFiglet实现终端输出炫酷的ASCII艺术字效果

    Python使用PyFiglet实现终端输出炫酷的ASCII艺术字效果

    PyFiglet是一个基于Python的纯文本到ASCII艺术字转换工具,它实现了FIGlet的完整功能,本文给大家介绍了Python如何使用PyFiglet实现终端输出炫酷的ASCII艺术字效果,需要的朋友可以参考下
    2025-12-12
  • Python设计模式结构型组合模式

    Python设计模式结构型组合模式

    这篇文章主要介绍了Python设计模式结构型组合模式,组合模式即Composite Pattern,将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,下文具有一定的参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • Linux上使用Python统计每天的键盘输入次数

    Linux上使用Python统计每天的键盘输入次数

    这篇文章主要介绍了Linux上使用Python统计每天的键盘输入次数,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python 中数组和数字相乘时的注意事项说明

    Python 中数组和数字相乘时的注意事项说明

    这篇文章主要介绍了Python 中数组和数字相乘时的注意事项说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 一个基于flask的web应用诞生 flask和mysql相连(4)

    一个基于flask的web应用诞生 flask和mysql相连(4)

    一个基于flask的web应用诞生第四篇,这篇文章主要介绍了如何让flask和mysql进行互联,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Python使用Selenium实现Web自动化的完整指南

    Python使用Selenium实现Web自动化的完整指南

    Selenium 是一个强大的开源 Web 自动化工具集,本文将作为一份面向完全新手的系统性指南,带你一步步了解什么是 Selenium,以及如何使用 Python 编写你的第一个 Web 自动化脚本
    2026-03-03
  • 解决Spyder中图片显示太小的问题

    解决Spyder中图片显示太小的问题

    下面小编就为大家分享一篇解决Spyder中图片显示太小的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python生成随机密码的方法

    Python生成随机密码的方法

    这篇文章主要为大家详细介绍了Python生成随机密码的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论