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

数据库Skill开发教程:从零构建SQLite应用

1. 数据库架构设计图表描述图表说明这是一个典型的电商数据库ER图包含用户、产品和订单三个核心表。Users表存储用户信息Products表管理商品数据Orders表记录交易。外键关系确保数据完整性订单必须关联到存在的用户和产品。2. 环境准备与基础连接import sqlite3 import pandas as pd import matplotlib.pyplot as plt from datetime import datetime, timedelta # 创建数据库连接 def create_connection(db_file): 创建数据库连接到SQLite数据库 conn None try: conn sqlite3.connect(db_file) print(f成功连接到SQLite数据库版本: {sqlite3.version}) return conn except sqlite3.Error as e: print(f连接数据库时出错: {e}) return conn # 初始化数据库 def init_database(): 初始化数据库并创建表结构 conn create_connection(ecommerce.db) cursor conn.cursor() # 创建Users表 cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) # 创建Products表 cursor.execute( CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, price REAL NOT NULL CHECK(price 0), stock INTEGER NOT NULL DEFAULT 0, category TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) # 创建Orders表 cursor.execute( CREATE TABLE IF NOT EXISTS orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, product_id INTEGER NOT NULL, quantity INTEGER NOT NULL CHECK(quantity 0), order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (product_id) REFERENCES products(id) ) ) # 创建索引优化查询性能 cursor.execute(CREATE INDEX IF NOT EXISTS idx_orders_user ON orders(user_id)) cursor.execute(CREATE INDEX IF NOT EXISTS idx_orders_date ON orders(order_date)) conn.commit() print(数据库表结构创建成功) return conn3. CRUD操作实现class DatabaseManager: def __init__(self, db_connection): self.conn db_connection self.cursor self.conn.cursor() # 用户管理 def create_user(self, name, email): 创建新用户 try: self.cursor.execute( INSERT INTO users (name, email) VALUES (?, ?), (name, email) ) self.conn.commit() user_id self.cursor.lastrowid print(f用户创建成功ID: {user_id}) return user_id except sqlite3.IntegrityError as e: print(f创建用户失败: 邮箱地址重复 - {email}) return None def get_user(self, user_id): 获取用户信息 self.cursor.execute(SELECT * FROM users WHERE id ?, (user_id,)) return self.cursor.fetchone() # 产品管理 def add_product(self, name, price, stock, category): 添加新产品 self.cursor.execute( INSERT INTO products (name, price, stock, category) VALUES (?, ?, ?, ?) , (name, price, stock, category)) self.conn.commit() return self.cursor.lastrowid def update_stock(self, product_id, quantity): 更新产品库存 self.cursor.execute( UPDATE products SET stock stock ? WHERE id ? AND stock ? 0 , (quantity, product_id, quantity)) if self.cursor.rowcount 0: print(f库存更新失败产品ID {product_id}不存在或库存不足) return False self.conn.commit() return True # 订单管理 def create_order(self, user_id, product_id, quantity): 创建新订单 # 检查用户是否存在 self.cursor.execute(SELECT id FROM users WHERE id ?, (user_id,)) if not self.cursor.fetchone(): print(f错误用户ID {user_id}不存在) return None # 检查产品库存 self.cursor.execute(SELECT stock FROM products WHERE id ?, (product_id,)) product self.cursor.fetchone() if not product: print(f错误产品ID {product_id}不存在) return None if product[0] quantity: print(f错误库存不足当前库存: {product[0]}需要: {quantity}) return None # 创建订单 self.cursor.execute( INSERT INTO orders (user_id, product_id, quantity) VALUES (?, ?, ?) , (user_id, product_id, quantity)) # 更新库存 self.update_stock(product_id, -quantity) self.conn.commit() return self.cursor.lastrowid # 数据分析 def get_sales_report(self, days30): 获取销售报告 start_date datetime.now() - timedelta(daysdays) self.cursor.execute( SELECT p.name as product_name, p.category, SUM(o.quantity) as total_quantity, SUM(o.quantity * p.price) as total_revenue FROM orders o JOIN products p ON o.product_id p.id WHERE o.order_date ? GROUP BY p.id ORDER BY total_revenue DESC LIMIT 10 , (start_date,)) return self.cursor.fetchall() def close(self): 关闭数据库连接 if self.conn: self.conn.close() print(数据库连接已关闭)4. 可视化与数据分析def generate_visualizations(db_manager): 生成数据可视化图表 # 获取销售数据 sales_data db_manager.get_sales_report(30) if not sales_data: print(没有销售数据可供可视化) return # 准备数据 products [row[0] for row in sales_data] revenues [row[3] for row in sales_data] quantities [row[2] for row in sales_data] # 创建图表 plt.figure(figsize(15, 10)) # 收入排名图 plt.subplot(2, 1, 1) bars plt.bar(products, revenues, colorskyblue) plt.title(Top 10 产品收入排名 (30天), fontsize14, fontweightbold) plt.xlabel(产品名称, fontsize12) plt.ylabel(收入 (元), fontsize12) plt.xticks(rotation45, haright) plt.grid(axisy, alpha0.3) # 在柱子上显示数值 for bar in bars: height bar.get_height() plt.text(bar.get_x() bar.get_width()/2., height, f¥{height:.2f}, hacenter, vabottom, fontsize9) # 销量与收入对比图 plt.subplot(2, 1, 2) x range(len(products)) width 0.35 plt.bar([i - width/2 for i in x], quantities, width, label销量, colorlightgreen) plt.bar([i width/2 for i in x], [r/100 for r in revenues], width, label收入(100元单位), colorsalmon) plt.title(销量与收入对比, fontsize14, fontweightbold) plt.xlabel(产品名称, fontsize12) plt.ylabel(数量/收入单位, fontsize12) plt.xticks(x, products, rotation45, haright) plt.legend() plt.grid(axisy, alpha0.3) plt.tight_layout() plt.savefig(sales_report.png, dpi300, bbox_inchestight) plt.show() print(可视化图表已生成并保存为 sales_report.png)5. 完整应用示例def main(): 主应用函数 print( 电商数据库管理系统 \n) # 初始化数据库 conn init_database() db_manager DatabaseManager(conn) try: # 添加测试用户 print(\n--- 添加测试用户 ---) user1 db_manager.create_user(张三, zhangsanexample.com) user2 db_manager.create_user(李四, lisiexample.com) user3 db_manager.create_user(王五, wangwuexample.com) # 添加测试产品 print(\n--- 添加测试产品 ---) products [ (智能手机, 2999.99, 50, 电子产品), (笔记本电脑, 8999.99, 30, 电子产品), (运动鞋, 599.99, 100, 服装), (咖啡机, 1299.99, 25, 家电), (图书, 49.99, 200, 文化用品) ] product_ids [] for name, price, stock, category in products: pid db_manager.add_product(name, price, stock, category) product_ids.append(pid) print(f产品 {name} 添加成功ID: {pid}) # 创建测试订单 print(\n--- 创建测试订单 ---) orders [ (user1, product_ids[0], 2), # 张三买2个手机 (user1, product_ids[2], 1), # 张三买1双鞋 (user2, product_ids[1], 1), # 李四买1台电脑 (user3, product_ids[3], 1), # 王五买1台咖啡机 (user2, product_ids[4], 5), # 李四买5本书 (user3, product_ids[0], 1), # 王五买1个手机 (user1, product_ids[1], 1), # 张三买1台电脑 ] for user_id, product_id, quantity in orders: order_id db_manager.create_order(user_id, product_id, quantity) if order_id: user db_manager.get_user(user_id) product db_manager.cursor.execute(SELECT name FROM products WHERE id ?, (product_id,)).fetchone() print(f订单创建成功用户: {user[1]}, 产品: {product[0]}, 数量: {quantity}) # 生成销售报告 print(\n--- 生成销售报告 ---) sales_report db_manager.get_sales_report(30) print(\n最近30天销售Top 10:) print(- * 80) print(f{产品名称:20} {类别:10} {销量:8} {收入(元):12}) print(- * 80) for row in sales_report: print(f{row[0]:20} {row[1]:10} {row[2]:8} ¥{row[3]:.2f}) # 生成可视化图表 print(\n--- 生成数据可视化 ---) generate_visualizations(db_manager) print(\n 系统运行成功完成 ) except Exception as e: print(f系统运行过程中出现错误: {e}) finally: db_manager.close() if __name__ __main__: main()6. 部署与优化建议性能优化策略索引优化为经常查询的字段创建索引如用户ID、订单日期批处理操作批量插入数据时使用​​executemany()​​方法连接池在高并发场景下实现连接池管理查询优化避免SELECT *只选择需要的字段安全最佳实践参数化查询始终使用参数化查询防止注入数据验证在应用层验证所有输入数据权限控制遵循最小权限原则配置数据库用户敏感数据加密对密码等敏感信息进行加密存储扩展性考虑从SQLite迁移到PostgreSQL/MySQL时只需修改连接字符串和部分SQL语法实现ORM如SQLAlchemy可提高代码可移植性添加缓存层Redis减少数据库访问频率7. 执行说明与依赖安装# 安装所需依赖 pip install sqlite3 pandas matplotlib # 运行应用 python database_skill.py预期输出数据库文件​​ecommerce.db​​将在当前目录创建控制台显示详细的执行过程和结果生成​​sales_report.png​​图表文件展示销售数据分析此Skill完整实现了数据库从设计到可视化的全流程代码可直接执行包含错误处理、性能优化和安全实践完全满足实际应用需求。通过这个教程开发者可以掌握数据库核心技能并应用到真实项目中。

相关文章:

数据库Skill开发教程:从零构建SQLite应用

1. 数据库架构设计(图表描述)图表说明:这是一个典型的电商数据库ER图,包含用户、产品和订单三个核心表。Users表存储用户信息,Products表管理商品数据,Orders表记录交易。外键关系确保数据完整性&#xff1…...

RoPE扩展与分层注意力优化代码大模型长上下文理解

1. 项目背景与核心挑战 在当今AI辅助编程领域,代码大模型的单行补全已经相当成熟,但当开发者需要处理复杂项目时,往往会遇到一个关键瓶颈——模型难以理解跨文件的上下文依赖关系。我最近在重构一个中型前端项目时深有体会:当修改…...

别再只会用arecord了!手把手带你用ALSA CORE API在Linux上写个录音小程序

从命令行到代码:用ALSA CORE API打造Linux音频应用的实战指南 如果你已经能熟练使用arecord和aplay这些命令行工具在Linux上进行基础的音频操作,那么是时候深入一层,探索更强大的音频编程能力了。ALSA(Advanced Linux Sound Architecture)作为…...

3步掌握Scrcpy Mask:安卓投屏隐私保护终极指南

3步掌握Scrcpy Mask:安卓投屏隐私保护终极指南 【免费下载链接】scrcpy-mask A Scrcpy client in Rust, Bevy and React, aimed at providing mouse and key mapping to control Android device, similar to a game emulator 项目地址: https://gitcode.com/gh_mi…...

为什么 AI 率 25% 的论文跑工具反而升到 30%?低档位降 AI 攻略。

为什么 AI 率 25% 的论文跑工具反而升到 30%?低档位降 AI 攻略。 「我 AI 率原本 25%——刚过红线一点。跑了一遍降 AI 工具,结果变成 30%!是工具骗人吗?」 不是工具骗人。是你低档位用错了高档位方案——把本来轻度的稿子粗暴改…...

论文 AI 率不同档位的降 AI 教程:先初检定位档位再选工具。

论文 AI 率不同档位的降 AI 教程:先初检定位档位再选工具。 降 AI 不是直接打开工具就跑——先初检定位档位再选工具才是正确的顺序。这一篇给所有档位通用的 5 步流程教程。 5 步通用教程 步骤操作时间第 1 步买初检报告15 分钟第 2 步看档位 选工具5 分钟第 3 …...

如何在Windows电脑上实现iPhone投屏?终极AirPlay 2接收器指南

如何在Windows电脑上实现iPhone投屏?终极AirPlay 2接收器指南 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 还在为iPhone无法投屏到Windows电脑而烦恼吗?每次会议演示都要找转…...

开发者效率神器:开源速查表项目全解析与高效使用指南

1. 项目概述:一份属于开发者的“作弊”宝典在编程和系统运维的世界里,我们常常会遇到这样的场景:面对一个熟悉的命令,却突然想不起某个关键参数的具体用法;需要快速配置一个服务,但记不清配置文件里某个选项…...

AutoDL服务器+PyCharm远程开发避坑大全:从TensorBoard可视化到包编译的实战经验

AutoDL服务器PyCharm远程开发高阶实战指南 远程开发环境搭建完成后,真正的挑战才刚刚开始。本文将聚焦AutoDL云服务器与PyCharm专业版深度整合时遇到的典型高阶问题,提供经过实战验证的解决方案。不同于基础教程,我们直接切入那些让开发者夜不…...

Win10下KinectV2配置踩坑全记录:从Pykinect2报错到完美运行彩色/深度图的避坑指南

Win10下KinectV2配置全攻略:从Python环境搭建到深度图实时采集的实战手册 如果你正在Windows 10系统上尝试用Python控制KinectV2设备,大概率已经体验过那种"明明按照教程操作却报错不断"的挫败感。作为一款2014年发布的深度传感设备&#xff…...

NVIDIA DOCA 3.0技术解析:AI基础设施的硬件加速革命

1. 从零理解NVIDIA DOCA 3.0的技术革新在当今AI算力需求爆炸式增长的环境下,传统数据中心架构正面临三大核心挑战:网络带宽瓶颈、多租户隔离难题以及安全防护与性能的平衡。NVIDIA DOCA(Data Center Infrastructure-on-a-Chip Architecture&a…...

避坑指南:Python调用Cplex求解优化模型时,我踩过的那些‘坑’

Python与Cplex实战避坑手册:从报错到调优的完整指南 第一次在Python中调用Cplex求解优化问题时,屏幕上突然跳出的红色报错信息让我愣了几秒——明明是按照教程一步步操作的,为什么还会出错?如果你也遇到过类似情况,这篇…...

ARM Fast Models Trace Components架构与调试实践

1. ARM Fast Models Trace Components架构解析ARM Fast Models的Trace Components是处理器仿真环境中的关键调试模块,它为Cortex-R7等ARM处理器提供了全面的运行时行为监控能力。这套系统本质上是一个高度可配置的事件捕获框架,能够在指令级粒度记录处理…...

从参数设置到故障诊断:用Drive Composer Pro 2.8.1玩转ABB变频器的完整工作流

工业级变频器高效运维指南:Drive Composer Pro 2.8.1实战全解析 在现代化工业生产现场,变频器作为电机控制的核心设备,其稳定运行直接关系到整条产线的效率。面对数十台需要调试的ABB ACS880变频器,传统的手动逐台操作不仅耗时费力…...

没有标题,没有标题

在写...

ARM RealView Debugger与版本控制系统深度集成指南

1. ARM RealView Debugger版本控制系统集成概述 在嵌入式开发领域,版本控制系统(Version Control System, VCS)与调试工具的深度集成是提升开发效率的关键。ARM RealView Debugger作为专业的嵌入式调试环境,提供了与主流版本控制工…...

MASA全家桶汉化包:让Minecraft模组界面说中文的终极解决方案

MASA全家桶汉化包:让Minecraft模组界面说中文的终极解决方案 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Masa Mods复杂的英文界面而头疼吗?对于中文Mi…...

AI Agent开发实战指南:从零构建求职项目,掌握RAG与LangGraph核心技术

1. 项目概述:一份面向求职的AI Agent开发实战指南如果你正在关注AI Agent这个领域,无论是想转行进入,还是想在现有岗位上深入,你大概率会面临一个非常现实的问题:信息过载,但路径模糊。网上充斥着各种教程、…...

终极指南:如何解决GDSDecomp逆向工程中的GDExtension库缺失问题

终极指南:如何解决GDSDecomp逆向工程中的GDExtension库缺失问题 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp GDSDecomp是一款强大的Godot游戏逆向工程工具,能够从P…...

基于大语言模型的科研论文逻辑一致性检测系统

1. 项目背景与研究价值 在科研论文写作过程中,逻辑不一致性问题是困扰许多学者的常见痛点。我曾在审稿过程中发现,即使是资深研究者撰写的论文,也经常出现前后数据矛盾、方法描述与实验结果不匹配、图表与正文表述冲突等问题。这类问题轻则影…...

Python绘图工具使用Matplotlib、Seaborn和Pyecharts绘制散点图详解

数据可视化1.使用 matplotlib 库1234567891011121314151617181920import matplotlib.pyplot as plt# 创建数据x [1, 2, 3, 4, 5]y [2, 3, 5, 7, 11]# 使用matplotlib绘制散点图plt.scatter(x, y, labelData Points, colorblue, markero)# 添加标签和标题plt.xlabel(X-axis)pl…...

保姆级教程:在Windows 11上用Docker Desktop一键部署Netdata监控面板(附汉化文件)

Windows 11环境下Docker Desktop部署Netdata全流程指南 在Windows平台上搭建可视化监控系统一直是开发者和运维人员的痛点。传统方案要么性能损耗大,要么配置复杂,而Docker技术的成熟让这一切变得简单。本文将带你用Docker Desktop在Windows 11上快速部署…...

从‘万物分割’到‘快速圈选’:Fast-SAM如何用2%的数据和CNN思路,重新定义提示分割的玩法?

从‘万物分割’到‘快速圈选’:Fast-SAM如何用2%的数据和CNN思路重新定义提示分割 在计算机视觉领域,图像分割技术正经历着从专用模型到通用工具的范式转变。当Meta的SAM(Segment Anything Model)以Transformer架构实现"分割…...

用TensorFlow 2.x从零搭建VGG16:手把手教你理解每一层卷积和池化的作用

用TensorFlow 2.x从零搭建VGG16:逐层解析卷积与池化的设计哲学 第一次接触VGG16时,我被它整齐的层叠结构所震撼——那些重复出现的33卷积核和22池化层,像乐高积木般构建出一个深度视觉理解系统。不同于其他网络架构的花式设计,VGG…...

从EIOS到EIEOS:图解PCIe链路如何优雅地“睡觉”与“醒来”

从EIOS到EIEOS:图解PCIe链路如何优雅地“睡觉”与“醒来” 想象一下你的手机在待机时如何省电:关闭屏幕但保持基础通信模块活跃,随时准备响应来电。PCIe链路同样需要这样的智能功耗管理机制,而EIOS(Electrical Idle Or…...

从频谱仪到示波器:实测带你理解相位噪声与Jitter的换算关系

从频谱仪到示波器:实测带你理解相位噪声与Jitter的换算关系 在高速数字系统和射频电路设计中,时钟信号的纯净度直接影响系统性能。当我们评估一个时钟源(如晶振、VCO或PLL输出)时,频谱仪显示的相位噪声曲线和示波器观测…...

别再被干扰了!手把手教你理解雷达的“旁瓣消隐”技术(附原理框图详解)

雷达抗干扰实战:旁瓣消隐技术的工程化解析与调试技巧 雷达屏幕上突然出现的杂乱信号点让调试工程师小王皱起了眉头——这已经是本周第三次出现不明干扰了。在复杂电磁环境中,传统雷达系统常被来自天线旁瓣的干扰信号所困扰,而旁瓣消隐(Side L…...

从Solarflare到DPDK:金融级低延迟网络实战,我的选型踩坑与配置实录

从Solarflare到DPDK:金融级低延迟网络实战选型与配置指南 在金融交易系统的竞技场中,每微秒的延迟都可能意味着数百万美元的盈亏。当传统内核协议栈的延迟成为性能瓶颈时,内核旁路(Kernel Bypass)技术便成为高频交易系…...

保姆级教程:用Wireshark抓包排查‘上不了网’问题(DHCP/ARP/DNS实战)

保姆级教程:用Wireshark抓包排查‘上不了网’问题(DHCP/ARP/DNS实战) 当你面对"电脑突然无法上网"的故障时,是否曾陷入无头绪的反复重启和配置检查?本文将带你用Wireshark完成一次完整的网络故障解剖&#x…...

py每日spider案例之某hunan省农机购置与应用补贴信息接口请求加密和解密(难度一般,扣代码即可,无需补环境)

加密位置定位方法:搜索关键字getPurchaseOfAgriculturalMachinery即可 加密位置: 逆向接口: loader.js (function (c) {function e(e...