Python第十三课:数据库交互 | 信息帝国的基石

🎯 本节目标

  1. 理解SQL与NoSQL的核心差异
  2. 掌握SQL基础语法与设计范式
  3. 学会使用ORM简化数据库操作
  4. 开发实战项目:电商订单系统
  5. 掌握索引优化与事务管理

1️⃣ 数据库理论基石(先懂原理再写代码)

💡 数据库类型对比
在这里插入图片描述

📚 生活化比喻:

  1. SQL → 图书馆的索引目录(严格分类
  2. NoSQL → 创意市集的摊位(自由灵活)

🔑 关系型数据库三大范式

  1. 原子性:每列不可再分(如"姓名"应拆分为"姓"和"名")
  2. 唯一依赖:所有字段必须完全依赖主键
  3. 消除传递依赖:非主键字段间不能有依赖关系

2️⃣ SQL语法精要(结构化查询语言

*📜 基础操作四象限
在这里插入图片描述
**🔗 多表联查示例

SELECT orders.id, users.name, products.title  
FROM orders  
JOIN users ON orders.user_id = users.id  
JOIN products ON orders.product_id = products.id  
WHERE orders.status = 'paid';  

3️⃣ ORM魔法:用Python操作数据库

✨ SQLAlchemy核心用法

from sqlalchemy import create_engine, Column, Integer, String  
from sqlalchemy.orm import declarative_base, sessionmaker  # 定义基类  
Base = declarative_base()  # 声明数据模型  
class User(Base):  __tablename__ = 'users'  id = Column(Integer, primary_key=True)  name = Column(String(50))  email = Column(String(100))  # 初始化数据库连接  
engine = create_engine('sqlite:///mydatabase.db')  
Base.metadata.create_all(engine)  # 创建会话  
Session = sessionmaker(bind=engine)  
session = Session()  # 增删改查操作示例  
new_user = User(name='王小明', email='wang@example.com')  
session.add(new_user)  
session.commit()  # 查询操作  
users = session.query(User).filter(User.name.like('王%')).all()  

4️⃣ 实战项目:电商订单系统

📦 数据库设计

class Product(Base):  __tablename__ = 'products'  id = Column(Integer, primary_key=True)  title = Column(String(100))  price = Column(Float)  stock = Column(Integer)  class Order(Base):  __tablename__ = 'orders'  id = Column(Integer, primary_key=True)  user_id = Column(Integer, ForeignKey('users.id'))  product_id = Column(Integer, ForeignKey('products.id'))  quantity = Column(Integer)  status = Column(String(20))  

⚙️ 事务处理示例

def place_order(user_id, product_id, quantity):  try:  # 开启事务  product = session.query(Product).get(product_id)  if product.stock < quantity:  raise ValueError("库存不足")  # 扣减库存  product.stock -= quantity  # 创建订单  new_order = Order(  user_id=user_id,  product_id=product_id,  quantity=quantity,  status='pending'  )  session.add(new_order)  # 提交事务  session.commit()  return "下单成功"  except Exception as e:  session.rollback()  return f"下单失败:{str(e)}"  

📚 知识图谱

数据库优化三叉戟:
┌──────────────┬───────────────────────────┐  
|   技术       |          作用             |  
├──────────────┼───────────────────────────┤  
| 索引         | 加速数据检索(类似书籍目录) |  
| 事务         | 保证ACID特性(原子性/一致性等)|  
| 缓存         | 减少数据库压力(Redis/Memcached)|  
└──────────────┴───────────────────────────┘  ACID原则:
- **原子性**(Atomicity):事务要么全完成,要么全不完成  
- **一致性**(Consistency):事务保持数据库整体逻辑不变  
- **隔离性**(Isolation):并发事务互不干扰  
- **持久性**(Durability):事务提交后永久生效  

🛠️ 课后挑战

  1. 为订单系统添加优惠券功能(需考虑过期时间与使用限制)
  2. 实现商品分页查询接口(LIMIT/OFFSET
  3. 使用索引优化百万级用户表的手机号查询

💡 参考答案提示:

# 创建索引示例  
from sqlalchemy import Index  
Index('idx_user_phone', User.phone)  # 分页查询  
def get_products(page=1, per_page=10):  return session.query(Product)\  .limit(per_page)\  .offset((page-1)*per_page)\  .all()  

🚀 下节剧透:《数据可视化:信息炼金术》

👉 你将解锁:

  • Matplotlib科学绘图技巧
  • Pyecharts交互式图表
  • 大数据仪表盘开发
  • 实战:疫情数据动态可视化

📢 互动任务:在评论区分享你设计过的数据库表结构,点赞最高设计将获得《SQL优化权威指南》实体书!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27981.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代

目录 文章目录 目录1960s~1999&#xff1a;GPU 的诞生&#xff1a;光栅化&#xff08;Rasterization&#xff09;3D 渲染算法的硬件化实现之路学术界算法研究历程工业界产品研发历程光栅化技术原理光栅化技术的软件实现&#xff1a;OpenGL 3D 渲染管线设计1. 顶点处理&#xff…

流程设计5原则与流程执行5要点

流程设计5原则与流程执行5要点 汉捷咨询 胡红卫 企业创造价值、为客户服务是通过业务流来实现的&#xff0c;而业务流程是业务流的载体和表现形式。把业务流程设计好、执行好&#xff0c;就能够持续提升企业各项活动的质量和效率&#xff0c;确保端到端的优质交付&#xff0c…

[Python学习日记-85] 并发编程之多进程 —— Process 类、join 方法、僵尸进程与孤儿进程

[Python学习日记-85] 并发编程之多进程 —— Process 类、join 方法、僵尸进程与孤儿进程 简介 multiprocessing 模块 Process 类 僵尸进程与孤儿进程 简介 在前面的进程理论的介绍当中我们已经介绍了进程的概念、并发与并行的区别以及进程并发的实现理论&#xff0c;这些都…

Linux : 环境变量

目录 一 环境变量 1.基本概念 二 常见环境变量 三 查看环境变量的方法 1.env:查看系统中所有环境变量 2. echo $NAME 四 如何不带路径也能运行的自己的程序 1.将自己的程序直接添加到PATH指定的路径下 五 环境变量与本地变量 1.本地变量 2. 环境变量 六C、C中main()…

【YashanDB认证】yashandb23.3.1 个人版单机部署安装实践

YCA报名链接如下: YashanDB|崖山数据库系统YashanDB学习中心-YCA认证详情 目前免费 主要参考文档&#xff1a; 单机&#xff08;主备&#xff09;部署 | YashanDB Doc 另外还参考摩天轮文章&#xff1a; YashanDB 23.2.9.101 企业版安装步骤抢先看&#xff01; - 墨天轮 …

Stiring-PDF:开源免费的PDF文件处理软件

Stiring-PDF是一款开源免费且比较好用的PDF文件处理工具。 Stiring-PDF官网网址为&#xff1a;https://www.stiringpdf.com/。Stiring-PDF是一款专业的PDF文件处理工具&#xff0c;支持Windows和macOS操作系统&#xff1b;提供丰富的PDF编辑和转换功能&#xff0c;适用于日常工…

docker-compose安装anythingLLM

1、anythingLLM的docker-compose文件 version: 3.8 services:anythingllm:image: mintplexlabs/anythingllm:latestcontainer_name: anythingllmports:- "23001:3001"cap_add:- SYS_ADMINenvironment:# Adjust for your environment- STORAGE_DIR/app/server/storage…

maven推送jar包到nexus

1.背景2.推送jar包到nexus3.从nexus拉取jar包4.release和snapshot区别 1.背景 本地虚拟机centos7.9(110.110.110.100)安装好了nexus 下面演示把本地的maven项目打包推送到nexus。 2.推送jar包到nexus 我项目的命名如下: 下面演示把这个项目jar包推送到nexus仓库 <groupI…

微信小程序上如何使用图形验证码

1、php服务器生成图片验证码的代码片段如下&#xff1a; 注意红框部分的代码&#xff0c;生成的是ArrayBuffer类型的二进制图片 2、显示验证码 显示验证码&#xff0c;不要直接image组件加上src显示&#xff0c;那样拿不到cookie&#xff0c;没有办法做图形验证码的验证&…

comfyui使用ComfyUI-AnimateDiff-Evolved, ComfyUI-Advanced-ControlNet节点报错解决

comfyui使用animate-diff生成动画&#xff0c;各种报错解决 报错1&#xff1a; ‘cond_obj’ object has no attribute ‘hooks’ 报错2&#xff1a; AdvancedControlBase.get_control_inject() takes 5 positional arguments but 6 were given 报错3&#xff1a; ‘ControlN…

centos搭建 Node.js 开发环境

Node.js &#xff0c;通常简称为Node&#xff0c;是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Chrome V8引擎&#xff0c;具备速度快、性能强等特点&#xff0c;可用于搭建各类网络应用&#xff0c;及作为小程序后端服务环境。npm 和 npx 都是和 Node.js 相关的…

涨薪技术|JMeter异步接口测试实战

前言 异步接口是指在请求发送后&#xff0c;客户端并不会立即收到响应结果。与同步接口不同&#xff0c;异步接口需要等待一段时间后才能得到相应的结果。 通常情况下&#xff0c;异步接口可以通过消息队列或事件监听器来实现。当用户请求进入系统时&#xff0c;可以将任务提…

SAP MDG —— MDG on S/4HANA 2023 FPS03 创新汇总

文章目录 MDG 基于SAP S/4HANA 2023 FPS03的创新BP/C/S&#xff1a;消息控制BP/C/S&#xff1a;手工分配数据控制者MDG-F&#xff1a;使用S/4扩展数据校验功能生成式AI可用于协助自定义对象的数据变更/同时可总结批量变更的内容 MDG 基于SAP S/4HANA 2023 FPS03的创新 由于从S…

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为了…

第五天 Labview数据记录(5.2 Text文件读写)

5.2 Text文件读写 文本文件读写在程序中具有重要的作用&#xff0c;主要体现在以下几个方面&#xff1a; 1. 数据存储与持久化&#xff1b;2. 数据交换与共享&#xff1b;3. 日志记录&#xff1b;4. 配置管理&#xff1b;5. 数据备份与恢复&#xff1b;6. 用户输入与输出&…

校园快递助手小程序毕业系统设计

系统功能介绍 管理员端 1&#xff09;登录&#xff1a;输入账号密码进行登录 2&#xff09;用户管理&#xff1a;查看编辑添加删除 学生信息 3&#xff09;寄件包裹管理&#xff1a;查看所有的包裹信息&#xff0c;及物流信息 4&#xff09;待取件信息&#xff1a;查看已到达的…

Docker入门指南:Windows下docker配置镜像源加速下载

Windows下docker配置镜像源加速下载 docker的官方镜像是海外仓库&#xff0c;默认下载耗时较长&#xff0c;而且经常出现断站的现象&#xff0c;因此需要配置国内镜像源。 国内镜像源概述 国内现有如下镜像源可以使用 "http://hub-mirror.c.163.com", "http…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序📚前言📚页面效果📚指令…

数据结构:二叉树的链式结构及相关算法详解

目录 一.链式结构的实现 1.二叉树结点基本结构&#xff0c;初始化与销毁&#xff1a; 二.链式结构二叉树的几种遍历算法 1.几种算法的简单区分&#xff1a; 2.前序遍历&#xff1a; 3.中序遍历&#xff1a; 4.后序遍历&#xff1a; 5.层序遍历&#xff08;广度优先遍历B…

动态规划/贪心算法

一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术&#xff0c;尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题&#xff0c;并保存这些子问题的解以避免重复计算&#xff0c;从而提高效率。 动态规划的核心思想 最优子结…