🎯 本节目标
- 理解SQL与NoSQL的核心差异
- 掌握SQL基础语法与设计范式
- 学会使用ORM简化数据库操作
- 开发实战项目:电商订单系统
- 掌握索引优化与事务管理
1️⃣ 数据库理论基石(先懂原理再写代码)
💡 数据库类型对比
📚 生活化比喻:
- SQL → 图书馆的索引目录(严格分类
- NoSQL → 创意市集的摊位(自由灵活)
🔑 关系型数据库三大范式
- 原子性:每列不可再分(如"姓名"应拆分为"姓"和"名")
- 唯一依赖:所有字段必须完全依赖主键
- 消除传递依赖:非主键字段间不能有依赖关系
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):事务提交后永久生效
🛠️ 课后挑战
- 为订单系统添加优惠券功能(需考虑过期时间与使用限制)
- 实现商品分页查询接口(LIMIT/OFFSET
- 使用索引优化百万级用户表的手机号查询
💡 参考答案提示:
# 创建索引示例
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交互式图表
- 大数据仪表盘开发
- 实战:疫情数据动态可视化