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.mzph.cn/news/67478.shtml

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

相关文章

Ubuntu系统下使用宝塔面板实现一键搭建Z-Blog个人博客的方法和流程

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

Ansible之playbook剧本

一、playbook概述1.1 playbook 介绍1.2 playbook 组成部分 二、playbook 示例2.1 playbook 启动及检测2.2 实例一2.3 vars 定义、引用变量2.4 指定远程主机sudo切换用户2.5 when条件判断2.6 迭代2.7 Templates 模块1.先准备一个以 .j2 为后缀的 template 模板文件,设…

算法leetcode|76. 最小覆盖子串(rust重拳出击)

文章目录 76. 最小覆盖子串:样例 1:样例 2:样例 3:提示:进阶: 分析:在这里插入图片描述 题解:rust:go:c:python:java: 76.…

若依新建模块

下面介绍如何在若依框架下新建一个子模块 第一步&#xff1a; 如图操作&#xff1a; 1. 2. 3. 4.在刚建立的子模块的pom.xml文件添加通用工具依赖 代码&#xff1a; <dependencies> <!-- 导入通用工具--><dependency><groupId>com.rchuing&l…

2023-09-04 Linux 让shell编译脚本里面设置的环境变量改变kernel里面驱动文件的宏定义值方法,我这里用来做修改固件版本

一、原生的读取版本接口是/proc/version&#xff0c;我这里需要提供获取固件版本号的api给app&#xff0c;因为版本号会经常需要修改&#xff0c;如果每次都到kernel下修改比较麻烦&#xff0c;我这里是想在编译脚本里面对版本号进行修改&#xff0c;这样方便一点。 二、主要修…

解决Jenkins执行Python脚本不能实时输出打印信息的问题

问题&#xff1a; 在使用Jenkins的shell command来执行python脚本时&#xff0c;总是会等脚本执行完毕&#xff0c;最后一次性才把脚本中的print语句给打印出来&#xff1b; 解决方法&#xff1a; 在print语句后加上sys.stdout.flush(), 就可以达到实时输出的目的了。

无需租云服务器,Linux本地搭建web服务,并内网穿透发布公网访问

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

2023 最新前端面试题 (HTML 篇)

1. src 和 href 的区别 src 用于替换当前元素&#xff08;引入&#xff09;&#xff0c;href 用于在当前文档和引用资源之间确立联系&#xff08;引用&#xff09; &#xff08;1&#xff09;src&#xff08;source&#xff09; 指向外部资源的位置&#xff0c;指向的内容将会嵌…

安卓 MeasureCache优化了什么?

安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下&#xff0c;全网居然没有人提过 measureCache。 在前文中提到过&#xff0c;measure的时候&#xff0c;如果命中了 measureCache&#xff0c;会跳过 onMeasure&#xff0c;同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOU…

CentOS 7上安装Python 3.11.5,支持Django

CentOS 7上安装Python 3.11.5,支持Django 今天安装django&#xff0c;报了“Django - deterministicTrue requires SQLite 3.8.3 or higher upon running python manage.py runserver”。查了一番资料&#xff0c;记录下来。 参考链接&#xff1a; 参考链接: Django的web项目…

TypeScript_树结构-BST树

树结构 树的特点 树通常有一个根。连接着根的是树干树干到上面之后会进行分叉成树枝&#xff0c;树枝还会分又成更小的树枝在树枝的最后是叶子 树的抽象 树可以模拟生活中的很多场景&#xff0c;比如&#xff1a;公司组织架构、家谱、DOM Tree、电脑文件夹架构 优秀的哈希函…

【Unity】VS Code 没有自动补全 MonoBehaviour 的方法

正常来说&#xff0c;在VS Code 输入类似 OnTriggerEnter2D等方法名时&#xff0c;VS Code会根据已经输入的前缀自动提示相关方法。 在不正常的情况下&#xff0c;根据StackOverFlow上面的回答&#xff0c;依次试过了 安装 .NET SDK安装 .NET Framework Dev PackVS Code安装 …

openGauss学习笔记-60 openGauss 数据库管理-逻辑存储结构

文章目录 openGauss学习笔记-60 openGauss 数据库管理-逻辑存储结构 openGauss学习笔记-60 openGauss 数据库管理-逻辑存储结构 openGauss的数据库节点负责存储数据&#xff0c;其存储介质也是磁盘&#xff0c;本节主要从逻辑视角介绍数据库节点都有哪些对象&#xff0c;以及这…

深入解析Kotlin类与对象:构造、伴生、单例全面剖析

前言 本篇文章将带您了解Kotlin编程中的重要概念&#xff1a;类及构造函数、访问修饰符、伴生对象和单例模式。就像搭积木一样&#xff0c;我们会逐步揭开这些概念的面纱&#xff0c;让您轻松理解它们的作用和用法。无论您是编程新手还是有经验的开发者&#xff0c;本文都将为…

HTML常见标签和作用

HTML基础 HTML的基本结构HTML元素HTML表单创建HTML表单元素处理HTML表单数据 HTML的基本结构 HTML&#xff08;HyperText Markup Language&#xff09;的基本结构包括以下几个主要部分&#xff1a; <!DOCTYPE html>&#xff1a;文档类型声明&#xff0c;它告诉浏览器文档…

Linux命令200例:man用于显示和阅读关于Linux内置命令的使用说明

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

Git使用经验总结2-配置用户名邮箱

可以使用git config指令来配置一些设置&#xff0c;比如配置用户名邮箱。在开发团队要求成员配置用户名和邮箱是很有用的&#xff0c;可以配合工具区分成员的代码&#xff0c;以及将代码中的问题发送给成员的邮箱中。 查看当前Git的用户名及邮箱的指令&#xff1a; git confi…

2023牛客暑期多校训练营7 CI「位运算」「根号分治+容斥」

C-Beautiful Sequence_2023牛客暑期多校训练营7 (nowcoder.com) 题意&#xff1a; 给定一个b序列&#xff0c;a序列满足 a [ i − 1 ] < a [ i ] a[i-1]<a[i] a[i−1]<a[i]且 a [ i ] ⊕ a [ i 1 ] b [ i ] a[i]\oplus a[i1]b[i] a[i]⊕a[i1]b[i]&#xff0c;求字…

后端SpringBoot+前端Vue前后端分离的项目(一)

前言&#xff1a;后端使用SpringBoot框架&#xff0c;前端使用Vue框架&#xff0c;做一个前后端分离的小项目&#xff0c;需求&#xff1a;实现一个表格&#xff0c;具备新增、删除、修改的功能。 目录 一、数据库表的设计 二、后端实现 环境配置 数据处理-增删改查 model…

Excel·VBA二维数组组合函数的应用实例

看到一个问题《关于#穷举#的问题&#xff0c;如何解决&#xff1f;(语言-开发语言)》&#xff0c;对同一个数据存在“是/否”2种状态&#xff0c;判断其是否参与计算&#xff0c;并输出一系列数据的“是/否”状态的结果 目录 方法1&#xff1a;二维数组组合函数结果 方法2&am…