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

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优化权威指南》实体书!

相关文章:

  • 慕慕手记项目日记2025.3.3
  • 计划和展示(5条)DeepSeek提示词
  • 小米手机如何录制屏幕?手机、电脑屏幕录制方法分享
  • PMP项目管理—资源管理篇—6.控制资源
  • 课程2. 机器学习方法论
  • 【折线图 Line】——9
  • 阿里通义万相2.1模型在亚马逊云科技ECS容器中的私有化部署
  • Lumerical INTERCONNECT 中的自相位调制 (SPM)
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息
  • STM32F103C8T6 标准库(SPL)迁移到 HAL 库指南
  • DeepSeek本地接口调用(Ollama)
  • MySQL-表
  • 【C++】:继承
  • 深入探秘FlinkCDC:实时数据处理的新利器
  • codewave初识
  • UDP协议(20250303)
  • 大语言模型揭秘:从诞生到智能
  • 【每日八股】计算机网络篇(三):IP
  • 【MySQL】第一章:数据库基础
  • 【2025年后端开发终极指南:云原生、AI融合与性能优化实战】
  • 小说网站用什么虚拟主机/个人免费建站系统
  • 厦门地税网站建设/指数函数
  • 唐汉网站建设/百度品牌
  • 网站开发语言什么意思/产品推广方式都有哪些
  • 云南免费网站建设/网络营销推广的概念
  • 美食网站是怎么做的/营销型网站模板