尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

完整教程:从零开始搭建 flask 博客实验(3)

完整教程:从零开始搭建 flask 博客实验(3)
📅 发布时间:2026/6/18 18:01:09

  本文主要聚焦于将数据库整合进 Flask 博客项目中,使用 MySQL + SQLAlchemy + Flask-Migrate  的组合。本文将从“为什么”“如何配置”“模型设计”“数据操作”四个维度,整理并总结这篇教程的核心内容,同时分享几个实践中的小建议。

一、为什么要在博客项目中使用数据库

作为一个完整的博客系统,数据持久化能力是必不可少的:文章、用户、评论、标签、分类……这些都需要存储、检索、修改。作者指出,虽然很多教程使用 SQLite,但他决定用 MySQL 来做演示。 CSDN博客

使用 MySQL 的好处包括:

  • 生产环境更常见,对规模、并发、连接数会更有保障;

  • 配合 ORM(如 SQLAlchemy)更容易扩展;

  • 使用迁移工具(如 Flask‑Migrate)可以方便地管理数据库变更。

所以,如果你的博客有可能演变为一个长期维护、功能增长的项目,从一开始就选好数据库是明智的。

二、环境准备与配置步骤

作者的环境准备流程清晰:

  1. 安装 Flask SQLAlchemy:pip install flask-sqlalchemy。 CSDN博客

  2. 安装 Flask-Migrate:pip install flask-migrate。 CSDN博客

  3. 安装 PyMySQL,因为 Python3 不再自带 MySQLdb:pip install pymysql。

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/flaskblog?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False
``` :contentReference[oaicite:7]{index=7}

在 app/__init__.py 中初始化 Flask 应用、SQLAlchemy、Migrate:

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
from app import routes, models
``` :contentReference[oaicite:8]{index=8}

在 app/__init__.py 中初始化 Flask 应用、SQLAlchemy 和 Migrate,是 Python Web 开发中非常基础且重要的步骤,它们分别对应「Web 应用核心」「数据库操作工具」「数据库迁移工具」。我们一步步拆解它们的作用和初始化逻辑:

1. 先理解这三个东西到底是啥?

  • Flask 应用:Flask 是一个轻量级的 Web 框架,相当于一个「容器」,用来管理你的网页路由(比如访问 /login 对应哪个函数处理)、模板渲染、请求响应等核心 Web 功能。没有它,就没有 Web 应用的基础。
  • SQLAlchemy:一个「数据库工具包」,它能让你用 Python 代码(而非直接写 SQL)来操作数据库(比如增删改查数据)。比如你想往 user 表加一条数据,不用写 INSERT INTO user ...,直接用 User(name="xxx").save() 这种 Python 语法就行,更简单且跨数据库(换 MySQL/PostgreSQL 不用改代码)。
  • Migrate(Flask-Migrate):基于 SQLAlchemy 的「数据库迁移工具」。当你后期修改数据库结构(比如给表加个新字段、改字段类型)时,它能帮你自动同步这些变化到数据库,避免手动删表重建(防止数据丢失)。

2. 为什么要在 app/__init__.py 中初始化?

__init__.py 是 Python 包的标识文件,当你用 from app import ... 导入时,会先执行这个文件里的代码。把初始化逻辑放这里,主要是为了:

  • 让整个项目的核心组件(Flask 应用、数据库工具)集中管理,方便其他模块(比如路由、模型)导入使用。
  • 避免循环导入问题(比如路由文件需要导入 Flask 应用,应用初始化又需要用到路由,放这里能解耦)。
  • 三、模型设计与表关系

文章中接着讲了如何在 models.py 中设计数据库模型,也就是 ORM 层。 CSDN博客

关键点包括:

  • 模型类继承 db.Model,定义字段、关系、方法。

  • 使用 Flask-Migrate 管理迁移:先 db init,再 db migrate,最后 db upgrade(尽管文章在这一篇里可能没详述,但这是常规流程)。

  • 建立“一对多”关系作为博客系统中常见的表关联方式(用户→文章、文章→评论等)。

  • 模型设计应考虑可扩展性,例如用户表中可能有头像、简介、注册时间等;文章表可能有标题、正文、发布时间、作者、标签、分类等。

小建议:

  • 在博客系统设计中,标签(tags)和分类(category)往往是多对多的关系,建议在设计阶段思考好。

  • 给模型添加 __repr__ 方法对于调试很有帮助。

  • 常用字段如 created_at, updated_at 可以通过基类统一管理。

四、数据操作与数据库迁移

在模型建好之后,接下来是数据的增删改查操作,以及迁移脚本管理。文章中提到了如何进行这些操作,从模型到数据库的同步。 CSDN博客

迁移工具 Flask-Migrate/Alembic 的使用,使得在开发中修改模型(如新增字段)不再需要手动去数据库操作,而是通过版本化的脚本来处理。作者展示了如何使用这些工具。

小建议:

  • 在每次模型修改后,务必先在开发环境运行 db migrate → db upgrade,确认无误后再部署到生产。

  • 在生产环境部署之前,建议先备份数据库。

  • 对于删除字段或修改字段类型等破坏性更改,要格外小心,可能需要额外迁移步骤或数据迁移脚本。


五、总结与感想

通过第三篇教程,作者将博客项目从“有前端 + 路由”阶段,推进到“有数据库支持”的完整阶段。这是一个重要里程碑:一个真实可用的博客系统离不开数据存储。

我个人的几点收获:

  • 从实践来看,尽早决定好数据库方案有利于后续功能扩展。

  • 模型设计阶段不要拖延,越早清晰定义结构,对后续开发越有益。

  • 使用 migration 工具不仅是好习惯,也几乎是必备。

  • 虽然教程以 MySQL 为例,但在开发初期采用 SQLite + 再切换策略也很常见。

如果你正在着手用 Flask 做博客或 Web 应用,这篇文章是值得细读并 “动手跟做” 的。下一篇(教程第四篇)预计会讲更多功能(如用户系统、登录、权限、文章管理等),敬请期待。

--------------------------------------------------------------------------------------------------------------------------------

-----------------疑难解答-------------------

from flask import Flask from config import Config from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db) from app import routes, models 此时 Flask 已经和 MySQL“握手成功”。 还是不理解工作原理,怎么就联上了

我来一步步拆开,讲清楚——为什么写几行 db = SQLAlchemy(app) 和 migrate = Migrate(app, db),Flask 就能“握手成功”。


一、Flask 是“中间人”

当你创建 Flask 应用:

app = Flask(__name__)

这行代码只是启动了一个“Web 框架容器”,它本身并不知道数据库的存在

接下来:

app.config.from_object(Config)

你往 Flask 的“配置字典”里放了数据库的连接信息,比如:

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/flaskblog'

Flask 只是保存了这条字符串,它自己不会去连 MySQL。


⚙️ 二、SQLAlchemy 是“数据库翻译器”

当你写:

db = SQLAlchemy(app)

这一刻非常关键,发生了几件事:

  1. SQLAlchemy() 是 Flask-SQLAlchemy 提供的一个类;

  2. 它会从 app.config 里读取上面的 SQLALCHEMY_DATABASE_URI;

  3. 它用 SQLAlchemy 的 Engine(引擎)对象 创建数据库连接;

  4. 这个 Engine 会调用底层驱动 pymysql(就是你安装的那个库),通过 TCP/IP 协议和 MySQL 建立连接;

  5. 一旦连接成功,db 就是一个“ORM 工厂”:

    • 它能帮你把类 → 表;

    • 对象 → 行;

    • 属性 → 列。

也就是说,db = SQLAlchemy(app) 做了这件事:

“从 Flask 读取配置 → 创建数据库引擎 → 建立连接 → 注册 ORM 上下文。”


三、Migrate 是“数据库版本控制器”

migrate = Migrate(app, db)

这一行并不会立即连接数据库。
它只是帮你注册好一个“迁移管理器”,以后当你运行:

flask db init flask db migrate flask db upgrade

这些命令时,Migrate 就能自动找到 app 和 db,知道该连接哪一个数据库,并同步你的模型变更。


四、当你导入 models 时,ORM 注册模型

from app import routes, models

当 models.py 被导入时,你的模型定义(例如):

class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64))

会自动注册到 SQLAlchemy 的“元数据(metadata)”系统中。

到这一步,数据库引擎 + 模型映射 + 应用上下文都已经在内存中绑定完成。


五、真正的“握手时刻”

当你第一次执行:

flask db upgrade

或在 shell 中执行:

db.create_all()

这时候,SQLAlchemy 调用底层引擎:

  • 读取配置中的数据库地址;

  • 调用 PyMySQL 打开 TCP 连接(例如 127.0.0.1:3306);

  • 发送 CREATE TABLE / INSERT 等 SQL;

  • MySQL 返回确认。

这就是“握手成功”的那一瞬间。
连接是通过 数据库驱动(PyMySQL) 实际建立的。


六、一句总结

层次职责
Flask提供应用上下文和配置
Flask-SQLAlchemy读取配置并创建数据库连接
SQLAlchemyORM 映射引擎,负责把 Python 类转成 SQL
PyMySQL真正执行 SQL、连接 MySQL 的驱动
Flask-Migrate追踪 ORM 变化并生成迁移脚本

所以你看到的那行“看似简单”的代码,其实背后是五层机制的协同。
Flask 自己不会连 MySQL,是 Flask-SQLAlchemy 帮你创建了引擎,并注册进 Flask 的上下文。

相关新闻

  • PbootCMS内容详情页标签
  • 2025年12月雅思机构深度测评:5家高性价比选择,真实提分数据全解析
  • 读智能新物种01合作伙伴(上)

最新新闻

  • 天津手表回收避坑指南:实测5家正规门店,哪家更让人放心? - 名奢变现站
  • 武汉卖金不用出门!上门回收品牌深度测评,合扬无损耗计价登顶榜首 - 奢侈品交易观察员
  • 深入解析MC9S08DE60内存映射与寄存器配置:从原理到实战优化
  • pandas多维聚合生产实践:滚动窗口、分组展开与性能优化
  • 2026沈阳钻石回收没有证书能卖吗?实测1200笔无票钻石成交记录 - 奢品小当家
  • 本草拾光商行 —— 承德满族人,全品类回收,专业爱好驱动,报价地道 - 深鉴新闻

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号