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

Python Flask Web开发二:数据库创建和使用

前言

数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能,还支持数据的关联和连接,保证数据的一致性和安全性。通过合理地设计和使用数据库,开发人员可以构建强大、可靠的 Web 应用程序,满足用户的需求。这里介绍:SQLAlchemy

一、SQLAlchemy安装

安装pymysql和SQLAlchemy,打开pycharm,打开终端,分别执行这两个命令

pip install pymysql
pip install SQLAlchemy

看到这样就是表示安装成功了

然后,执行这个命令检查SQLAlchemy是否正确安装,运行这个命令会输出版本号的。

python -c "import sqlalchemy; print(sqlalchemy.__version__)"

二、Flask-Migrate的安装和使用

Flask-Migrate是一个使用 Alembic 处理 Flask 应用程序的 SQLAlchemy 数据库迁移的扩展。数据库操作可通过 Flask 命令行界面进行。Flask-Migrate 是一个扩展,它以正确的方式配置 Alembic 以与 Flask 和 Flask-SQLAlchemy 应用程序配合使用。就实际的数据库迁移而言,一切都由 Alembic 处理,因此您可以获得完全相同的功能。

2.1、Flask-Migrate安装

使用pip安装,在开发工具的命令行里面执行

pip install Flask-Migrate

出现这样表示安装成功

2.2、Flask-Migrate使用

2.2.1、在__init__.py里面编写

# __init__.py 文件是一个特殊的文件,它在包的目录中起到了重要的作用
# 主要作用如下:
# 声明包:__init__.py 文件的存在将目录标识为一个包。它告诉 Python 解释器该目录是一个包,并且可以在该目录中使用包的相关功能。
# 初始化模块:__init__.py 文件可以包含初始化代码,当导入包时,这些代码将在包的命名空间中执行。这些初始化代码可以用于设置包的环境、导入子模块或执行其他必要的操作。
# 控制导入行为:__init__.py 文件可以控制包的导入行为。通过在 __init__.py 文件中定义 __all__ 变量,可以指定导入包时应该导入的模块列表。这样可以控制模块的可见性和公开的接口。
# 提供包级别的功能:__init__.py 文件可以包含包级别的变量、常量、函数或类,这些可以在包内的其他模块中使用。
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from .config import Configapp = Flask(__name__)
app.config.from_object(Config)db = SQLAlchemy(app)
migrate = Migrate(app, db)

2.2.2、在config.py里面编写

import osclass Config(object):BASE_DIR = os.path.abspath(os.path.dirname(__file__))SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'SQLALCHEMY_COMMIT_ON_TEARDOWN = TrueSQLALCHEMY_RECORD_QUERIES = TrueSQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \'sqlite:///' + os.path.join(BASE_DIR, 'database.sqlite')SQLALCHEMY_TRACK_MODIFICATIONS = FalseSQLALCHEMY_ECHO = True

2.2.3、在models.py里面编写

单个点号(.)表示当前目录或当前模块

from . import dbclass User(db.Model):__tablename__ = "users"id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(50), unique=True, nullable=False)password = db.Column(db.String(255), nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)name = db.Column(db.String(50), unique=True, nullable=False)created_at = db.Column(db.DateTime, nullable=False)

2.2.4、在app.py里面编写

from datetime import datetime
from flask import Flask, request, jsonify
from .Response.ResMsg import ResMsg
from .models import Userfrom . import app, db@app.route("/login", methods=["POST", "GET"])
def login():# get username and password form json postusername = request.json.get("username")password = request.json.get("password")if username == "admin" and password == "123456":# 假设登录成功后你已经获得了相应的用户名、密码和电子邮件username = "sandy"password = "123456"email = "sady@gmail.com"# 创建 User 对象并设置字段值new_user = User(username=username,password=password,email=email,name="Sandy",created_at=datetime.now())# 将新用户对象添加到数据库会话中db.session.add(new_user)# 提交会话以保存更改到数据库db.session.commit()response = {"code": 200,"msg": "登录成功",}return jsonify(response)else:response = {"code": 400,"msg": "登录失败",}return jsonify(response)

2.2.5、db安装,创建迁移存储库,分别执行这两个命令

flask db init
flask db migrate -m "Initial migration."

这样就会在项目里面生成一个在 config.py里面写的database.sqlite数据库.

再在项目的终端里面执行下面命令,可以将迁移脚本描述的更改应用到您的数据库。

flask db upgrade

每次数据库模型更改时,请重复migrateupgrade命令。

三、创建数据表

3.1、运行:flask run

3.2、然后在rest-api.http文件里面编写这些代码,点击三角形运行

3.3、刷新,查看users表

⚠️注意:后面表里面有新增或者删除字段的还执行这两步就可以了

flask db migrate -m "说明"

flask db upgrade

恭喜你,到这里为止,你就成功搭建好数据库和管理功能了,咱们下一集见

相关文章:

Python Flask Web开发二:数据库创建和使用

前言 数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能,还支持数据的关联和连接,保证数据的一致性和安全性。通过合理地设计和使用数据库,开发人员可以构建强大、可靠的 Web 应用程序,满足用户的…...

快速学会git版本管理——上传gitee仓库

首先在gitee右上角有一个新建仓库 创建之后打开自己想要上传的文件 右键打开 Git Bash Here 接下来会弹出git的窗口 首先先初始化仓库 用git命令 git init 然后用git add . 上传所有文件上传到暂存区(上一篇文章说过add是单个文件,add . 是所有文件) 没有显示错误 …...

应用在智能洗衣机触摸屏上的电容式触摸芯片

智能型全自动洗衣机可以自动判断水温、水位、衣质衣量、衣物的脏污情况,决定投放适量的洗涤剂和的洗涤程序。当洗衣桶内衣物的多少和质地不同,而注入水使其达到相同的水位时,其总重量是不同的。利用这一点,通过对洗衣电动机低速转…...

npm版本升级报错

解决方法: 执行npm install --legacy-peer-deps依赖对等 npm install xxx --legacy-peer-deps命令用于绕过peerDependency里依赖的自动安装;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但版本不同的问题,以npm v4-v6的方式去继续执行…...

Vue+Element-ui+SpringBoot搭建后端汽车租赁管理系统

最近在做项目,花了一周的时间搭建了一个十分完备的汽车租赁后端管理系统。页面采用纯Vue2Element-ui搭建,后端采用SpringbootMybatis搭建,数据库采用Mysql。包括了登录验证,根据不同权限进入不同界面、数据增删改查、表格分页、表…...

PKU校园网连接失败

校园网连接失败 连上校园网,显示已经连接但是没有网络,手动输入校园网门户( its.pku.edu.cn )也没有用。 使用 windows自带的疑难解答,分析发现dns解析异常。 解决方案 手动配置IPV4的dns。 同学的电脑可以正常连接dns,将同学…...

STM32存储左右互搏 I2C总线读写FRAM MB85RC16

STM32存储左右互搏 I2C总线读写FRAM MB85RC16 在较低容量存储领域,除了EEPROM的使用,还有铁电存储器FRAM的使用,相对于EEPROM, 同样是非易失性存储单元,FRAM支持更高的访问速度, 其主要优点为没有EEPROM持续写操作跨页…...

【typeof instanceof Object.prototype.toString constructor区别】

几个数据类型判断区别 typeofinstanceofObject.prototype.toStringconstructor typeof 它返回的是一个字符串,表示未经过计算的操作数的类型 typeof(undefined) //"undefined"typeof(null) //"object"typeof(100) //"number"typeof…...

ARM Codec要求

文章目录 前言一、驱动1. linux kernel driver (非V4L2驱动)1.1 porting guide1.2 programing guide1.3 CPU占用率统计1.4 memory使用统计(不包含input/output/working buffer) 2. freeRTOS driver2.1 porting guide,驱动所支持freeRTOS版本列表2.2 programing guid…...

QT多线程

1.QT4.7以前的版本-----线程处理方式 1. 出现的警告 直接使用从UI—>转到槽,就会出现警告 2. 出现的错误 error: invalid operands of types QTimer* and void (QTimer::*)(QTimer::QPrivateSignal) to binary operator& 错误:无效的操作数类型’QTimer…...

【linux命令讲解大全】059.命令行利器:快速执行指定命令的command命令

文章目录 command补充说明语法参数实例 从零学 python command 调用并执行指定的命令。 补充说明 command 命令用于调用指定的命令并执行,命令执行时不查询 shell 函数。command 命令只能执行 shell 内部的命令。 语法 command [参数]参数 指令:需…...

opencv-4.5.2-android-sdk.zip安装教程

opencv-4.5.2-android-sdk.zip: 下载链接:百度网盘 请输入提取码 提取码:s0p2 导入模块的方法: ①、导入模块 ②、定位到sdk目录 点击ok就行,就导入成功了。导入成功后会多出一个可展开的opencv文件夹(自己命名的),一定要能展…...

接口自动化测试系列-excel管理测试用例

代码源码: 框架结构 核心代码 excel数据处理 from configureUtil.LogUtil import getlog logger getlog(targetNameHandleData) import xlrd from openpyxl import load_workbook,workbook from openpyxl.styles import Font, colors import openpyxl import o…...

Spring——Spring的控制反转IOC

摘要 IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;…...

基于CentOS7.5构建LVS-DR 群集,并启用Nginx负载均衡,一键完成。

在两台服务器上的步骤: 安装必要软件:在两台服务器上,安装必要的软件,包括ipvsadm和keepalived。使用以下命令安装软件: sudo yum install ipvsadm keepalived -y 禁用防火墙或配置规则:禁用防火墙或根据实…...

redis 数据结构(二)

整数集合 整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不时,就会使用整数集这个数据结构作为底层实现。 整数集合结构设计 整数集合本质上是一块连续内存空间,它的结构定义如下: typed…...

Hadoop依赖环境配置与安装部署

目录 什么是Hadoop?一、Hadoop依赖环境配置1.1 设置静态IP地址1.2 重启网络1.3 再克隆两台服务器1.4 修改主机名1.5 安装JDK1.6 配置环境变量1.7 关闭防火墙1.8 服务器之间互传资料1.9 做一个host印射1.10 免密传输 二、Hadoop安装部署2.1 解压hadoop的tar包2.2 切换…...

[C++网络协议] I/O复用

具有代表性的并发服务器端实现模型和方法: 多进程服务器:通过创建多个进程提供服务。 多路复用服务器:通过捆绑并统一管理I/O对象提供服务。✔ 多线程服务器:通过生成与客户端等量的线程提供服务。 目录 1. I/O复用 2. select函…...

3D数据导出工具HOOPS Publish:3D数据查看、生成标准PDF或HTML文档!

HOOPS中文网http://techsoft3d.evget.com/ 一、3D导出SDK HOOPS Publish是一款功能强大的SDK,可以创作丰富的工程数据并将模型文件导出为各种行业标准格式,包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:…...

[羊城杯 2023] web

文章目录 D0nt pl4y g4m3!!! D0n’t pl4y g4m3!!! 打开题目&#xff0c;可以判断这里为php Development Server 启动的服务 查询得知&#xff0c;存在 PHP<7.4.21 Development Server源码泄露漏洞(参考文章) 抓包&#xff0c;构造payload 得到源码 class Pro{private $ex…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...