当前位置: 首页 > news >正文

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

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

  • 首页(公开博客显示)
  • 博客发布与查询
  • 用户登录与注册
  • 底层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 datetimeclass 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 鉴权、微服务拆分”。

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

http://www.lryc.cn/news/624694.html

相关文章:

  • 【MySQL】超详细入门学习
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 【Python】Python Socket 网络编程详解:从基础到实践​
  • 云原生俱乐部-mysql知识点归纳(1)
  • 【前端面试题】JavaScript 核心知识点解析(第十四题解析到第二十二题)
  • 【牛客刷题】正六边形阴影面积计算
  • FastRTSP介绍
  • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
  • 多台服务器批量发布arcgisserver服务并缓存切片
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级(401)
  • Python入门Day18:模块与包(module package)
  • Spring Boot + Spring Kafka 集成
  • SMTPman,smtp ssl助力安全高效邮件传输!
  • Java 中表示数据集的常用集合类
  • 低端设备加载webp ANR
  • 安全存储之 SAES+HUK 使用技巧和常见问题 LAT1543
  • Rust 教程之简介000
  • CSS:水平垂直居中
  • 【银河麒麟桌面系统】配置匿名文件夹与用户认证共享服务
  • 2025年秋招Java后端面试场景题+八股文题目
  • AI 推荐系统云端部署实战:基于亚马逊云科技免费资源的工程实现
  • 从财务整合到患者管理:德国医疗集团 Asklepios完成 SAP S/4HANA 全链条升级路径
  • CAN总线的安全性
  • Linux小白加油站,第三周周考
  • 世界模型之自动驾驶
  • 想找出版社出书?这样选就对了!
  • 《P1195 口袋的天空》
  • OVS:ovn是如何支持组播的?
  • GPT-5之后:当大模型更新不再是唯一焦点
  • 多硬盘构建lvm存储