Python第十三课:数据库交互|信息帝国的基石
- 开源代码
- 2025-09-11 09:48:02

🎯 本节目标 理解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 ') session.add(new_user) session mit() # 查询操作 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 mit() 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交互式图表大数据仪表盘开发实战:疫情数据动态可视化 📢 互动任务:在评论区分享你设计过的数据库表结构,点赞最高设计将获得《SQL优化权威指南》实体书!Python第十三课:数据库交互|信息帝国的基石由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python第十三课:数据库交互|信息帝国的基石”
上一篇
大模型微调