使用 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 dbclass 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> 

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3246681.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Python进阶 异常-包-模块案例

import my_utils.str_util from my_utils import file_utilprint(my_utils.str_util.str_reserves("黑马程序员")) print(my_utils.str_util.substr("itheima",0,4))#文件处理 def print_file_info(file_name):"""将给定路径文件的内容输出…

appium2.0 执行脚本遇到的问题

遇到的问题: appium 上的日志信息: 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上, 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

MongoDB综合实战篇(超容易)

一、题目引入 在MongoDB的gk集合里插入以下数据: 用语句完成如下功能: (1)查询张三同学的成绩信息 (2)查询李四同学的语文成绩 (3)查询没有选化学的同学 (4&#xf…

Windows与Ubuntu安装ffmpeg

文章目录 前言ffmpeg的简介安装ffmpegWindows下载设置环境变量 Ubuntu 总结 前言 FFmpeg是一款非常强大的开源音视频处理工具,它包含了众多的音视频编解码库,可以用于音视频的采集、编解码、转码、流化、过滤和播放等复杂的处理。在Windows系统上安装FF…

2024年互联网时代:专业企业IM即时通讯聊天软件的重要性不容忽视!

在这个日新月异的信息时代里,企业IM即时通讯无疑是与我们日常生活联系最紧密的科技工具之一!它不仅能让我们轻松实现与亲朋好友间的流畅沟通与联系,更为互联网时代的广大企业员工提供了便捷高效的协同办公平台,助力企业内部信息无…

昂科烧录器支持TI德州仪器的混合信号微控制器MSPM0L1106

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中TI德州仪器的混合信号微控制器MSPM0L1106已经被昂科的通用烧录平台AP8000所支持。 MSPM0L1106微控制器(MCU)属于MSP高度集成的超低功耗32位MSPM0 MCU系列,该系列基…

美式键盘 QWERTY 布局的来历

注:机翻,未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…

rust + python+ libtorch

1: 环境,ubuntu 1.1 rust : rust-1.79.0 (在官方下载linux版本后,解压文件夹,内部有个install的sh文件,可安装) 安装成功测试:cargo --version 1.2 python3.10 (直接使用apt install pytho…

快速排序及归并排序的实现与排序的稳定性

目录 快速排序 一. 快速排序递归的实现方法 1. 左右指针法 步骤思路 为什么要让end先走? 2. 挖坑法 步骤思路 3. 前后指针法 步骤思路 二. 快速排序的时间和空间复杂度 1. 时间复杂度 2. 空间复杂度 三. 快速排序的优化方法 1. 三数取中优化 2. 小区…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层:类名第二层:成员变量(类的属性)第三层:函数方法(类…

手机操作系统的沉浮往事

手机操作系统的沉浮往事(上) 移动终端操作系统,也就是指手机、平板电脑等设备所使用的操作系统。 在移动互联网高度发达的今天,我们使用移动终端操作系统的时长,可能已经远远超过了 Windows 等桌面操作系统。 那么&…

dp or 数学问题

看一下数据量&#xff0c;只有一千&#xff0c;说明这个不是数学问题 #include<bits/stdc.h> using namespace std;#define int long long const int mo 100000007; int n, s, a, b; const int N 1005;// 2 -3 // 1 3 5 2 -1 // 1 -2 -5 -3 -1 int dp[N][N]; int fun…

​行业原型:P2P汽车抵押借贷平台

行业原型预览链接&#xff1a; 文件类型&#xff1a;.rp 支持版本&#xff1a;Axrure RP 8 文档名称&#xff1a;金融-P2P汽车抵押借贷平台&#xff08;web-移动-后台&#xff09; 文件大小&#xff1a;1.00 MB 原型目录 原型界面 ​ “210721” 领取

LineSegmentIntersectorUtils::IntersectFunctor::intersect源码分析

目录 1. 概述 2. 代码环境说明 3. intersect函数分析 1. 概述 osgUtil::Intersector有几个子类&#xff0c;如下&#xff1a; 每个子类表示不同的求交器。所谓求交器就是判定和物体相交的类&#xff0c;通过这些类可以很方便的得出交点、实现拾取功能等。LineSegmentInterse…

Unity动画系统(3)---融合树

6.1 动画系统基础2-6_哔哩哔哩_bilibili Animator类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class EthanController : MonoBehaviour { private Animator ani; private void Awake() { ani GetComponen…

跟李沐学AI:模型选择、过拟合和欠拟合

目录 训练误差和泛化误差 验证数据集和测试数据集 K-则交叉验证 模型总结 过拟合和欠拟合 模型容量 模型容量的影响 估计模型容量 数据复杂度 拟合总结 训练误差和泛化误差 训练误差&#xff1a;模型在训练数据上的误差 泛化误差&#xff1a;模型在新数据上的误差 …

我无法给博客园出钱,那我就出点建议吧

相信这张图大家都已经看见过了&#xff0c;从去年就传出博客园经营困难的情况&#xff0c;其实很多平台&#xff0c;不止是博客园&#xff0c;包括现在国内的很多公司都一样&#xff0c;经营是一件大难题&#xff0c;但很多公司我们不知道&#xff0c;悄无声息的倒下了。而博客…

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述&#xff1a; 泛微 e-cology 是泛微公司开发的协同管理应用平台。泛微 e-cology v10.64.1的/services/接口默认对内网暴露&#xff0c;用于服务调用&#xff0c;未经身份认证的攻击者可向 /services/WorkflowServiceXml 接口发送恶意的SOAP请求进行SQL注入&#xff0c;…

Nginx优化与防盗链(企业网站架构部署与优化)

Nginx网页优化与防盗链 本章结构 隐藏版本号&#xff1a; 首先进入nginx的配置文件&#xff1a; vim /usr/local/nginx/conf/nginx.conf 添加这个语句&#xff0c;重启服务后生效。 重启服务后生效&#xff1b; 如果想把nginx名称都给改了&#xff0c;需要修改nginx的源代码…

STM32使用Wifi连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 完整工程&a…