使用 Flask 3 搭建问答平台(二):User 模型搭建

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 使用 Flask 3 搭建问答平台(二):User 模型搭建

前言

以下所有代码均是在之前的基础上添加!!!

后面的章节均是如此

知识点

1. 使用 pymysql 模块连接数据库

2. 在模型中创建用户数据表

3. 初始化数据库、创建初始迁移脚本、应用初始迁移脚本

一、User 模型搭建

1.1 准备数据库

1.2 config.py

# 数据库配置信息
HOST = '127.0.0.1'
PORT = 3306
DATABASE = 'qa'
USER = 'root'
PASSWORD = 'YDD5201314'
DB_URI = 'mysql://{user}:{password}@{host}:{port}/{db}'.format(user=USER, password=PASSWORD, host=HOST, port=PORT, db=DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
  • HOST = '127.0.0.1'
  • 数据库服务器的主机地址,这里是本地主机,即localhost。
  • PORT = 3306
  • 数据库服务器的端口号,MySQL的默认端口是3306。
  • DATABASE = 'qa'
  • 要连接的数据库的名称,这里是qa
  • USER = 'root'
  • 连接数据库的用户名,这里是root
  • PASSWORD = 'YDD5201314'
  • 连接数据库的用户密码,这里是YDD5201314
  • DB_URI
  • 使用格式化字符串构造一个数据库URI,该URI将用于配置SQLAlchemy的数据库连接。格式化字符串中的占位符被具体的数据库连接参数替换。

SQLALCHEMY_DATABASE_URI = DB_URI

  • 将构造的数据库URI赋值给SQLALCHEMY_DATABASE_URI,这是Flask-SQLAlchemy用来配置数据库连接的标准配置项。

1.3 models.py

from datetime import datetime
from exts import db
 
 
class UserModel(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True,autoincrement=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(20), nullable=False)
    email = db.Column(db.String(50), unique=True, nullable=False)
    join_time = db.Column(db.DateTime(timezone=True), default=datetime.now)
  • __tablename__ = 'users'
  • 指定该模型对应的数据库表名为users。如果不指定,SQLAlchemy将默认使用类名的小写形式作为表名。

id = db.Column(db.Integer, primary_key=True, autoincrement=True)

  • 定义一个名为id的列。
  • 数据类型为Integer
  • 该列是主键(primary_key=True)。
  • 该列的值会自动递增(autoincrement=True)。
  • username = db.Column(db.String(20), unique=True, nullable=False)
  • 定义一个名为username的列。
  • 数据类型为String,最大长度为20个字符。
  • 该列的值必须是唯一的(unique=True)。
  • 该列不能为空(nullable=False)。
  • password = db.Column(db.String(20), nullable=False)
  • 定义一个名为password的列。
  • 数据类型为String,最大长度为20个字符。
  • 该列不能为空(nullable=False)。
  • email = db.Column(db.String(50), unique=True, nullable=False)
  • 定义一个名为email的列。
  • 数据类型为String,最大长度为50个字符。
  • 该列的值必须是唯一的(unique=True)。
  • 该列不能为空(nullable=False)。

join_time = db.Column(db.DateTime(timezone=True), default=datetime.now)

  • 定义一个名为join_time的列。
  • 数据类型为DateTime,并启用时区支持(timezone=True)。
  • 该列的默认值是当前时间(default=datetime.now),即当插入新记录时,如果没有提供join_time的值,则会使用当前时间作为默认值。

1.4 app.py

from flask_migrate import Migrate
import pymysql
 
# 使 pymysql 模块模仿 MySQLdb 模块,从而让使用 MySQLdb 的代码可以无缝切换到 pymysql
# 必须放在第一行
pymysql.install_as_MySQLdb()
 
# 这行代码初始化了 Flask-Migrate 扩展,用于处理数据库迁移
migrate = Migrate(app, db)

pymysql.install_as_MySQLdb()

  • 背景:SQLAlchemy和许多其他依赖MySQL的Python库通常默认使用 MySQLdb 作为MySQL数据库接口。
  • 问题MySQLdb 可能不易安装或不兼容某些系统或环境(例如Windows)。
  • 解决方案pymysql 是一个纯Python实现的MySQL客户端库,更易于安装和使用。
  • 实现:通过调用 pymysql.install_as_MySQLdb()pymysql 模块就会以 MySQLdb 的身份出现,所有对 MySQLdb 的调用都会被重定向到 pymysql,从而让代码无需修改即可使用 pymysql

migrate = Migrate(app, db)

  • 背景:在开发和维护数据库驱动的应用程序时,数据库架构(如表、列等)经常需要进行修改。手动进行这些修改既繁琐又容易出错。
  • 解决方案:数据库迁移工具(如Flask-Migrate)可以自动化和简化这一过程。
  • Flask-Migrate:是Alembic(SQLAlchemy的数据库迁移工具)在Flask中的集成,用于管理数据库的迁移。
  • 初始化Migrate(app, db) 初始化了 Flask-Migrate,绑定了 Flask 应用实例 app 和 SQLAlchemy 实例 db。这允许你使用 Flask-Migrate 提供的命令行工具来创建、应用和管理数据库迁移。

1.5 三部曲

# 初始化数据库迁移环境:
(venv) PS D:\Flask-zhiliao\flaskProject> flask db init
Creating directory 'D:\\Flask-zhiliao\\flaskProject\\migrations' ...  done
Creating directory 'D:\\Flask-zhiliao\\flaskProject\\migrations\\versions' ...  done
Generating D:\Flask-zhiliao\flaskProject\migrations\alembic.ini ...  done
Generating D:\Flask-zhiliao\flaskProject\migrations\env.py ...  done
Generating D:\Flask-zhiliao\flaskProject\migrations\README ...  done
Generating D:\Flask-zhiliao\flaskProject\migrations\script.py.mako ...  done
Please edit configuration/connection/logging settings in 'D:\\Flask-zhiliao\\flaskProject\\migrations\\alembic.ini' before proceeding.
 
 
# 创建初始迁移脚本:
(venv) PS D:\Flask-zhiliao\flaskProject> flask db migrate
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'users'
Generating D:\Flask-zhiliao\flaskProject\migrations\versions\7ea6eff38af5_.py ...  done
 
 
# 应用迁移脚本到数据库:
(venv) PS D:\Flask-zhiliao\flaskProject> flask db upgrade
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 7ea6eff38af5, empty message
(venv) PS D:\Flask-zhiliao\flaskProject> 

执行完成后会多出来个文件夹

数据库同样也生成了两张表






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
flask中生成迁移脚本并将orm模型映射至MySQL
flask中生成迁移脚本并将orm模型映射至MySQL
195 0
|
存储 API Docker
只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型
一杯茶的功夫部署完成机器学习模型!
3460 0
|
3月前
|
前端开发 Python
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
|
3月前
|
Python
使用 Flask 3 搭建问答平台(一):项目结构搭建
使用 Flask 3 搭建问答平台(一):项目结构搭建
|
6月前
|
SQL 关系型数据库 数据库
Flask模型关系与复杂查询技巧
【4月更文挑战第16天】本文探讨了Flask中使用SQLAlchemy进行模型关系管理与复杂查询的方法。SQLAlchemy作为ORM工具,简化了数据库操作。模型关系包括一对一、一对多和多对多,通过定义类间关系实现。文章还介绍了join、子查询、聚合函数、分组与排序等查询技巧,并提出了优化查询性能的建议,如创建索引、避免N+1查询、使用分页及预加载关联数据。理解并运用这些技巧能提升Flask应用的开发效率和性能。
|
6月前
|
TensorFlow 网络安全 算法框架/工具
tensorflow的模型使用flask制作windows系统服务
tensorflow的模型使用flask制作windows系统服务
|
机器学习/深度学习 前端开发 Python
Flask模型部署教程?
Flask模型部署教程?
298 0
|
机器学习/深度学习 存储 前端开发
图像分类模型嵌入flask中开发PythonWeb项目
图像分类模型嵌入flask中开发PythonWeb项目
|
数据库 Python
Flask学习与项目实战5:通过SQLAlchemy连接数据库进行ORM模型的简单增删改查
是对于数据库的ORM的框架,直接操作模型,安装命令为pip install SQLAlchemy。 SQLAlchemy是一个独立的ORMR框架,可以独立于FLASK存在,也可以在Django中使用。 Flask-SQLAlchemy是对SQLAlchemy的一个封装,更适合在flask使用。
Flask学习与项目实战5:通过SQLAlchemy连接数据库进行ORM模型的简单增删改查
|
PyTorch 算法框架/工具 计算机视觉
使用Flask快速部署PyTorch模型
对于数据科学项目来说,我们一直都很关注模型的训练和表现,但是在实际工作中如何启动和运行我们的模型是模型上线的最后一步也是最重要的工作。 今天我将通过一个简单的案例:部署一个PyTorch图像分类模型,介绍这个最重要的步骤。
474 0
使用Flask快速部署PyTorch模型