python+flask后端开发~项目实战 | 博客问答项目--数据库信息的基本配置与UserModel的创建,映射,关联

发布于:2025-08-19 ⋅ 阅读:(22) ⋅ 点赞:(0)

在这里插入图片描述
项目功能概述

  • 首页(公开博客显示)
  • 博客发布与查询
  • 用户登录与注册
  • 底层MySQL数据库的动态响应与支持

简介基础文件架构搭建好之后,我们的第二步工作是需要MySQL表Flask应用中的Python对象建立一个映射关系,并后续让它与路由、模板、表单无缝协作。本文将以最精炼的代码量,完成前述功能,让数据库实体ORM对象在模块化开发中实现逐步创建、映射与关联。(需要了解项目基础结构的小伙伴,可以参考我的前一篇博客python+flask后端开发~项目实战 | 博客问答项目–模块化文件架构的基础搭建

目录

一、MySQL数据库的基本配置
二、UserModel的创建
三、渲染结果
四、结束语


🚀 读完本文,你将解锁以下超实用技能和知识储备:

  • 🧩 SQLAlchemy declarative_base() 的魔法:把表当类写
  • 🖥️ Flask-Migrate 的零停机迁移口令
  • 🗝️ 一条URI即可复现的MySQL配置模板

一、MySQL数据库的基本配置

在任何Flask项目里,config.py 是通往数据库的唯一钥匙。下面给出config.py中的数据库配置内容,并逐行拆解:


# 数据库的配置信息
# MySQL 所在的主机名
HOSTNAME = "127.0.0.1"
# MYSQL 监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,读者用自己设置的
USERNAME = "root"
# 连接 MYSQL的密码,读者用自己的
PASSWORD = "*****"
# MYSQL上创建的数据库名称
DATABASE = "blog_back"

DB_URI= f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

SQLALCHEMY_DATABASE_URI = DB_URI

解释:

  • utf-8mb4 保证 Emoji 安全,无需再转义。
  • app.py 调用 DB.init_app(app)migrate = Migrate(app, DB)后,Flask 即拥有完整的 ORM 与迁移能力
  • 这里的字符编码集需要与底层数据库的编码格式相同,我在MySQL数据库中新建了一个blog_back库,用于存放与项目相关的底层数据。关于数据库的建立与关联更多信息,读者可以参考我之前的博客文章:Python + Flask 后端开发~进阶系列 | Flask与底层数据库(MySQL)的连接
  • 数据库初始信息如下:
    在这里插入图片描述

二、UserModel的创建

models.py 中,通过 SQLAlchemy 创建 UserModel 实体,首先实现底层数据表的搭建,以及将其与flask应用建立映射关系:(models.py添加如下代码)

from exts import DB
from datetime import datetime

class UserModel(DB.Model):
    # 创建一个表,名为user,可自定义
    __tablename__ = "user"
    # 添加主键字段,并定义了类型、主键、自增
    id = DB.Column(DB.Integer, primary_key=True, autoincrement=True)
    # 添加字段,并指定字符长度,非空
    username = DB.Column(DB.String(100), nullable=False)
    password = DB.Column(DB.String(100), nullable=False)
    email = DB.Column(DB.String(100), nullable=False, unique=True)
    join_time = DB.Column(DB.DateTime, default=datetime.now)

在上述代码中,我在表中分别新增了idusernamepasswordemailjoin_time字段,用于锁定用户信息以及明确其创建时间,为后续的登录、注册、博客发布等功能做准备。

这里,join_time采用了python自带的datetime函数,用于实时获取时间信息。

在完成上述工作后,我们还需要在app.py中进行注册,才能实现config.pymodels.pyflask应用绑定,如下所示:
在这里插入图片描述

# -*- coding: utf-8 -*-
# 从flask包中导入flask类
from flask import Flask
# 导入config
import config
# 导入SQLAlchemy对象
from exts import DB
# 导入用户对象
from models import UserModel
# 导入视图函数的蓝图对象
from blueprints.author import BPObj as auth_BPObj
from blueprints.ques_ans import BPObj as qa_BPObj
from flask_migrate import Migrate

# 从flask类中创建一个app对象
app = Flask(__name__)
# 将config配置导入flask对象,绑定配置文件
app.config.from_object(config)
# 将SQLAlchemy对象与app对象绑定
DB.init_app(app)

migrate = Migrate(app, DB)

# 将蓝图对象注册到app中
app.register_blueprint(auth_BPObj)
app.register_blueprint(qa_BPObj)


@app.route('/')
def hello_world():
    return 'hello world'



if __name__ == '__main__':
    app.run()

三、渲染结果

当完成上述工作后,我们可采用migrate插件实现ORM模型的创建,执行,以及迁移功能,包括以下三个步骤:(读者可参考我之前的博客文章:python+flask后端开发~进阶系列 | Flask-migrate插件:实现ORM模型的迁移

  • flask db init # 用于初始化迁移环境,只需要执行一次
  • flask db migrate -m "Initial migration." # 用于生成迁移脚本
  • flask db upgrade

将上述三次代码在终端依次执行即可,渲染结果如下:
在这里插入图片描述

此时,我们已经在底层数据库blog_back中新建了user表,并在表中添加了5个字段,同时,5个字段的属性也与我们在代码中要求的一致。

在这里插入图片描述

四、结束语

读到此处,你已经完成了flask后端开发项目中的基础文件架构搭建,以及数据库的基本配置,后续,我将带你逐步完善项目中的其它代码模块,实现文首所展示了4大项目功能

在代码复现过程中,你可能会遇到一些数据库的报错信息,例如:

  • AttributeError: 'NoneType' object has no attribute 'encoding',这个可能是你的数据库配置信息输入错误,或者是字符集编码不一致导致的哦!记得检查一下

有关代码运行过程中的其它问题,欢迎留言,我会和你一起学习与讨论~~~~


最后,感谢你的阅读!如果你觉得本文对你有帮助,不妨点赞和关注,我会继续分享更多关于 Python 和 Flask 开发的实用知识。🚀

我的邮箱:yifanduan@stu.ncst.edu.cn.

关注专栏每周更新,带你从“第一个 Flask 项目”一路进阶到“Docker 部署、JWT 鉴权、微服务拆分”。

版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。


网站公告

今日签到

点亮在社区的每一天
去签到