项目功能概述:
- 首页(公开博客显示)
- 博客发布与查询
- 用户登录与注册
- 底层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)
在上述代码中,我在表中分别新增了id
、username
、password
、email
和join_time
字段,用于锁定用户信息以及明确其创建时间,为后续的登录、注册、博客发布等功能做准备。
这里,join_time
采用了python自带的datetime
函数,用于实时获取时间信息。
在完成上述工作后,我们还需要在app.py
中进行注册,才能实现config.py
,models.py
与flask应用的绑定,如下所示:
# -*- 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 鉴权、微服务拆分”。
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。