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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab图像处理-

有些时候,直接利用图像的灰度直方图选择阈值不是非常直观,这时,可以利用图像三个通道的直方图来进行图像分割,操作步骤如上文所示,下图为原始图片。 下图为三通道直方图。 下图将三个通道的直方图会绘制到一个图表上&a…

idea意外退出mac

目录 问题描述 解决过程 问题描述 mac上的idea我很久没用了,之前用的时候还是发布新版的开源项目,这几天再用的时候,就出现了idea意外退出的问题,我上网查找了很久,对于我的问题都没有很好的解决。 解决过程 在寻求…

yapi以及gitlab的容器化部署

yapi部署: https://blog.csdn.net/Chimengmeng/article/details/132074922 gitlab部署 使用docker-compose.yml version: 3 services: web: image: twang2218/gitlab-ce-zh:10.5 restart: always hostname: 192.168.xx.xx environm…

Redis的数据持久化方案

目录 前言 RDB方式 概述: 1.RDB手动 2.RDB自动 RDB优缺点 AOF方式 概述 AOF写数据的三种策略 AOF相关配置 AOF重写 AOF重写方式 手动重写 bgrewriteaof 自动重写 总结 前言 Redis是一个内存型数据库,也就是说如果不将内存中的…

stable diffusion实践操作-大模型介绍-SDXL1大模型

系列文章目录 大家移步下面链接中,里面详细介绍了stable diffusion的原理,操作等(本文只是下面系列文章的一个写作模板)。 stable diffusion实践操作 提示:写完文章后,目录可以自动生成,如何生…

Mysql 高阶语句

高阶语句 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理; 例如只取 10 条数据、对查询结果进行排序或分组等,来获取想要有用的数据 无非还是对于MySQL —— 增、删、改、查 的操作 升降序 SELECT…

Promise难懂?一篇文章让你轻松驾驭

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强&a…

Vue框架学习记录之环境安装与第一个Vue项目

Node.js的安装与配置 首先是Node.js的安装,安装十分简单,只需要去官网下载安装包后,一路next即可。 Node.js是一个开源的、跨平台的 JavaScript 运行时环境 下载地址,有两个版本,一个是推荐的,一个是最新…

PostgreSQL PG15 新功能 PG_WALINSPECT

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (…

容器资料: Docker和Singularity

容器资料 Docker和Singularity Docker比较适合测试: 环境适配,每种环境对应一个容器。Docker需要host宿主机上运行Docker服务(root权限),隔离性很高,但会牺牲性能,对GPU环境支持不好(需要安装NVIDIAN公司的插件才能把GPU暴露给container) Sigularity可…

实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack

NCrunch Visual Studio 扩展 .NET 的终极实时测试工具 在编码时查看实时测试结果和内联指标。 下载v4.18 发布于 2023 年 7 月 17 日 跳过视频至: 代码覆盖率 指标 分布式处理 配置 发动机模式 Visual Studio 自动并发测试 NCrunch 是一个完全自动化的测试扩展&a…

stc单片机外部中断+EC11编码器实现计数功能

stc单片机外部中断+EC11编码器实现计数功能 🎬 串口输出测试效果: 📑EC11编码器原理图: 🍁EC11编码器输出信号说明: 📗检测说明: 📑以EC11-A信号作为一个时钟基准信号,检测到EC11-A之后,再去判断B的动作,一个相对的电平。当检测到A信号下降沿触发后,检测…

Linux系统中驱动面试分享

​ 1、驱动程序分为几类? 字符设备驱动 块设备驱动 网络设备驱动 2、字符设备驱动需要实现的接口通常有哪些 open、close、read、write、ioctl等接口。 3、主设备号与次设备号的作用 主设备号和次设备号是用来标识系统中的设备的,主设备号用来标识…

高级IO---五种IO模型多路转接之Select

文章目录 五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、多路转接IO5、异步IO总结IO 同步与异步阻塞与非阻塞设置非阻塞利用fcntl接口实现一个设置非阻塞的函数 多路转接之Selectselect函数原型fd_set结构返回值 socket就绪条件读就绪写就绪 select的特点select使用示例Util.…

转载: 又拍云【PrismCDN 】低延时的P2P HLS直播技术实践

低延时的P2P HLS直播技术实践本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》低延时的P2P HLS直播技术实践 [首页 > Open Talk NO.41 | 2018 音视频技术沙龙深圳站 > 低延时 WebP2P 直播技术实践https://opentalk-blog.b0.upaiyun.com/prod/2018-0…

TSINGSEE青犀AI视频分析/边缘计算/AI算法·人脸识别功能——多场景高效运用

旭帆科技AI智能分析网关可提供海量算法供应,涵盖目标监测、分析、抓拍、动作分析、AI识别等,可应用于各行各业的视觉场景中。同时针对小众化场景可快速定制AI算法,主动适配大厂近百款芯片,打通云/边/端灵活部署,算法一…

【Linux】高级IO --- Reactor网络IO设计模式

人其实很难抵制诱惑,人只能远离诱惑,所以千万不要高看自己的定力。 文章目录 一、LT和ET模式1.理解LT和ET的工作原理2.通过代码来观察LT和ET工作模式的不同3.ET模式高效的原因(fd必须是非阻塞的)4.LT和ET模式使用时的读取方式 二…

Java实践-物联网loT入门-MQTT传输协议

前言 MQTT是一个极其轻量级的发布/订阅消息传输协议,适用于网络带宽较低的场合. 它通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者发布某个主题的消息,然后订阅了该主题的客户端则会收…

华硕ROG2/ROG5/ROG6/ROG7Pro强解锁L锁-快速实现root权限-支持Zenfone9/8/7

2023年9月新增解锁BL适配(需要联系技术远程操作): 新增支持华硕ROG5/5S/5Pro机型强制解锁BL,并且支持OTA在线更新功能 新增支持华硕ROG6/6Pro机型强制解锁BL,并且支持OTA在线更新功能 新增支持华硕ROG7/7Pro机型强制解…

kuiper安装

1:使用docker方式安装 docker pull lfedge/ekuiper:latest docker run -p 9081:9081 -d --name kuiper -e MQTT_SOURCE__DEFAULT__SERVERtcp://127.0.0.1:1883 lfedge/ekuiper:latest这样就安装好了,但是操作只能通过命令完成,如果想要通过页面来操作&…