第 2 课:全栈核心基石 ——MySQL 数据库 + ORM 映射(数据落地必备)
·
✅ 今日学习目标
✅ 掌握 MySQL 数据库核心操作:库 / 表创建、增删改查(CRUD)、条件查询、联表查询;
✅ 学会 Python 操作 MySQL(pymysql 库),实现后端与数据库的直接交互;
✅ 吃透 ORM 核心思想,掌握 Flask-SQLAlchemy/Django ORM 用法,告别原生 SQL,提升开发效率;
✅ 实现「用户模块」数据持久化,将用户信息存入真实 MySQL 数据库,替代模拟数据。
✅ 一、核心知识点精讲(数据层是前后端项目的灵魂,重中之重)
模块 1:MySQL 数据库核心操作(零基础落地,贴合项目)
前后端项目的所有数据(用户、商品、订单)最终都要存入数据库,MySQL 是企业级最主流的关系型数据库,必学!
✅ 1. 核心概念(快速理解)
- 库(Database):存放同类业务的表集合(比如「电商库」包含用户表、商品表);
- 表(Table):二维结构,存储具体数据(比如「用户表」包含 id、用户名、密码字段);
- 字段(Column):表的列,对应数据的属性(比如 id、username、password);
- CRUD:数据库核心操作 —— 增(Create)、删(Delete)、改(Update)、查(Read)。
✅ 2. 高频 SQL 语句(项目必备,直接复制使用)
sql
-- 1. 创建数据库(指定编码,避免中文乱码)
CREATE DATABASE IF NOT EXISTS python_full_stack DEFAULT CHARACTER SET utf8mb4;
-- 2. 使用数据库
USE python_full_stack;
-- 3. 创建用户表(核心,对应后端用户模块)
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增ID
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名,唯一非空
password VARCHAR(50) NOT NULL, -- 密码
nickname VARCHAR(50) NOT NULL, -- 昵称
create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间,自动填充
);
-- 4. 增:插入用户数据
INSERT INTO user (username, password, nickname) VALUES ("admin", "123456", "管理员");
-- 5. 查:查询所有用户/条件查询(最常用)
SELECT * FROM user; -- 查询所有
SELECT * FROM user WHERE username = "admin"; -- 条件查询
-- 6. 改:修改用户昵称
UPDATE user SET nickname = "超级管理员" WHERE username = "admin";
-- 7. 删:删除指定用户
DELETE FROM user WHERE id = 1;
模块 2:Python 操作 MySQL(pymysql 库,原生交互)
python
运行
import pymysql
# 1. 建立数据库连接
conn = pymysql.connect(
host="localhost", # 本地数据库地址
port=3306, # 端口号
user="root", # 数据库用户名
password="你的MySQL密码", # 数据库密码
database="python_full_stack", # 目标数据库
charset="utf8mb4"
)
# 2. 获取游标(执行SQL的工具)
cursor = conn.cursor(pymysql.cursors.DictCursor) # 返回字典格式数据
# 3. 执行SQL(查询用户)
sql = "SELECT * FROM user WHERE username = %s"
cursor.execute(sql, ("admin",))
result = cursor.fetchone() # 获取单条数据
print(result) # 输出:{'id':1, 'username':'admin', ...}
# 4. 执行增/改/删,必须提交事务
sql = "INSERT INTO user (username, password, nickname) VALUES (%s, %s, %s)"
cursor.execute(sql, ("test", "123456", "测试用户"))
conn.commit() # 提交事务,生效数据
# 5. 关闭连接
cursor.close()
conn.close()
模块 3:ORM 映射(核心进阶,企业级必用)
ORM(对象关系映射):将 Python 的类映射为数据库的表,类的实例映射为表的行,不用写原生 SQL,用 Python 语法操作数据库,效率翻倍!
✅ 1. Flask-ORM(Flask-SQLAlchemy)核心用法
python
运行
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import datetime
app = Flask(__name__)
# 配置数据库连接(格式:mysql+pymysql://用户名:密码@地址:端口/库名)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@localhost:3306/python_full_stack"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False # 关闭不必要的警告
db = SQLAlchemy(app)
# 1. 定义模型类 → 对应数据库的user表(ORM核心:类=表,属性=字段)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(50), nullable=False)
nickname = db.Column(db.String(50), nullable=False)
create_time = db.Column(db.DateTime, default=datetime.datetime.now)
# 2. 创建表(执行一次即可)
with app.app_context():
db.create_all()
# 3. ORM增删改查(无需SQL)
# 增:添加用户
with app.app_context():
new_user = User(username="orm_test", password="123456", nickname="ORM测试")
db.session.add(new_user)
db.session.commit()
# 查:查询用户
with app.app_context():
user = User.query.filter_by(username="orm_test").first()
print(user.nickname) # 直接调用属性,无需解析字典
# 改:修改用户
with app.app_context():
user = User.query.filter_by(username="orm_test").first()
user.nickname = "ORM测试用户"
db.session.commit()
# 删:删除用户
with app.app_context():
user = User.query.filter_by(username="orm_test").first()
db.session.delete(user)
db.session.commit()
✅ 二、今日核心实战(必做,数据持久化落地)
✅ 实战需求:改造第 1 课的 Flask 用户接口,将「模拟数据」替换为「MySQL+ORM」,实现用户数据真实持久化,重启项目后数据不丢失。
✅ 核心亮点
- 用 Flask-SQLAlchemy 实现 ORM 映射,替代原生 SQL;
- 所有用户操作(注册、登录、查询)均对接 MySQL 数据库;
- 保持接口规范不变,前端可无缝对接。
✅ 三、课后作业
📌 基础作业(必做)
- 基于 ORM 创建「商品表」(id、商品名、价格、库存),实现商品的增删改查接口;
- 用 Django ORM 实现用户模块的核心操作,对比 Flask-ORM 的差异;
- 手写 ORM 的 3 个核心优势,说明为什么企业级开发不用原生 SQL。
📌 进阶作业(选做)
实现「用户 - 商品」关联查询(一个用户可收藏多个商品),用 ORM 完成联表查询,返回用户及收藏的商品数据。
✅ 明日预告
第 3 课:前后端全栈联动核心 —— 接口规范 + AJAX 请求 + 跨域解决,实现前端页面与后端接口的数据互通(全栈关键一步)。
更多推荐

所有评论(0)