http增删改查四种请求方式操纵数据库

注意:在manage.py项目入口文件中的路由配置里,返回响应的 return语句后面的代码不会执行,所以路由配置中每个模块代码要想都执行,不能出现return

激活虚拟环境:venv(我的虚拟环境名称)\Scripts\activate

启动项目:(命令行中先设置FLASK_APP环境变量指向manage.py,然后启动)

 pthon 库ORM实现数据库数据增删改查:

  #查询数据库userlist = db.session.execute("select * from user").fetchall()#session sql语句,execute执行,fetchall获取所有。查询所有用户print(userlist)# return jsonify({"data":[dict(x) for x in userlist]})#插入数据,前面是字段,后面是值db.session.execute("insert into user (email,password) values ('第三个邮箱','第三个密码')")#修改数据(把id为3用户密码改为123456)db.session.execute("update user set password ='123456' where id=3 ")#删除数据db.session.execute("delete from user where id=3")

增加    insert into (字段) values  (值)

删除   delete from 表名 where 检索条件

修改   update 表名  set 字段 where 检索条件

查询   select   *  from 表名 where  检索条件

配置数据库文件,将数据库配置写到config里,防止因为数据库密码地址之类变化还要去修改manag.py中的配置:

#config.py项目配置文件,把所有动态改的值写在动态文件里
mysql_user="root"
mysql_password="root"
mysql_host="localhost"
mysql_port=3306
mysql_db="social"

 

将manage.py中需要动态修改的数据库信息进行通配符操作:

from config import *app.config['SQLALCHEMY_DATABASE_URI']='mysql://{}:{}/@{}:{}/{}'.format(mysql_user,mysql_password,mysql_host,mysql_port,mysql_db)

#manage.py
#类名用驼峰命名法,方法名用下划线法from flask import Flask,request,jsonify
from dabase.py import dbapp=Flask(__nama__)#处理get请求,查询数据库
@app.route('/',method=["GET"])#访问该url触发相应函数操作,只接收指定get请求
def index():  #首页res={"msg":"hello"}userid=request.args.get("id",None)print("请求的参数id是{}".format(id))userlist=db.session.execute("select * from user").fetchallprint(userlist)#处理删除请求,删除指定关键字值
@app.route("/delete/",methods=["DELETE"])
def delete_api():userid=request.args.get("id",None)_sql="delete from `user` where `id` = {}".format(userid)print(_sql)db.session.execute(_sql) #session.execute() 是一个用来直接执行 SQL 语句的方法,它允许在当前会话中执行任意的 SQL 查询和命令return jsonify({"errcode":0,"msg":"数据删除成功"})##接收get和delete请求,request.args.get(),使用args,
#客户端提供要访问的地址和数据,地址对应的操作会将客户端提供的数据进行操作#处理插入请求,插入指定关键字
@app.route("/insert/",methods=["POST"])
def insert_api():email=request.form.get("email",None)  #为啥不写password呢_sql="insert into `user` (`email`,`password`) values ('{}','{}')".format(email,password)print(_sql)db.session.execute(_sql)return jsonify({"errcode":0,"msg":"数据插入成功"})#处理修改请求,修改1指定关键字
@app.route("/update/",methods=["PUT"])
def update_api():userid=request.form.get("id",None)_sql="update `user` set `password` = '{}' where id = {}".format(password,userid)print(_sql)db.session.execute(_sql)retuen jsonify({"errcode":0,"msg":"修改数据成功"})

http的四个请求能处理任意查询参数
注意:变量加个下划线叫做私有变量,外部不能调用和修改
 

关系到表和字段名必须用撇号引起来,防止触发关键字。例如order ,如果不加上撇号引起来,会导致错误,到底是排序还是表名呢?

字段添加值变量,若该值变量是字符串一定要用单引号引起来,整型和浮点型不用加单引号

#接口测试文件import requests #发起http请求的库class HttpApiTest:
#get方法发起请求def test_get(self,url,data={}):res = requests.get(url,params=data)return res.textdef test_delete(self,url,data={})res = requests.delete(url,params=data)#发送请求时url接收的是函数参数中url具体的值,params接受的是函数参数中data具体的值return res.textdef test_post(self,url,data={})res=requests.post(url,data=data)return res.textdef test_put(self,url,data={})res=requests.put(url,data=data)return res.textif __name__ == '__main__':
#实例化对象httpapi = HttpApiTest()res=httpapi.test_put("http://127.0.0.1:5000/update/",data={"id":"4"})print(res)

 测试脚本模拟客户端,在知道后端四个处理请求的地址之后,发送请求时携带相应的地址和要处理的参数,向后端发送四个不同的请求,后端根据不同的请求操作数据库并且给出客户端响应

 

request接收请求上下文,args和form都属于请求上下文request里面的具体属性

get和delete通过args接收参数,put和post通过form接收参数

args通过url接收参数,form通过请求体接收参数

测试中,requests发送请求方式也不一样,delete和get用params,对应后端使用args。post和put用data,对应后端使用form

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

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

相关文章

ubuntu20.04编译安装opencv-4.9.0的cuda版本

NVIDIA显卡驱动550.107.02(4060显卡:8.9,3060显卡:8.6)cuda:12.1cudnn:8.9.7opencv4.9.0,opencv_contrib_4.9.0 前三个安装略过! 主要编译安装opencv4.9.0: 下载openc…

Unity3D 小案例 像素贪吃蛇 03 蛇的碰撞

Unity3D 小案例 像素贪吃蛇 第三期 蛇的碰撞(完结) 像素贪吃蛇 碰撞蛇身 当蛇头碰撞到蛇身时,游戏应该判定为失败。 找到蛇身预制体,添加 Body 标签和碰撞体,碰撞体的大小为 0.5,跟蛇头和蛇身的碰撞体范…

使用数据泵(Data Pump)迁移Oracle数据库数据

目的 将一个oracle数据库实例数据复制给另一个实例 注意事项 sqlplus(即在本机linux环境下执行sql)、expdp、impdp等命令一般需要切换到oracle用户才能执行 如果你当前是linux的root用户,请切换用户 su - oracle //一般在oracle账号下才能…

node节点使用:

节点: 1.返回父节点 parentNode let par li1.parentNodepar.style.border 1px solid red 2.获取所有子节点的集合 childNodes let nodes par.childNodes 3.第一个子节点 firstChild let frist par.firstChild 4.最后一个 lastChild let last par.lastC…

AlDente Pro for Mac电池健康保护工具

AlDente Pro for Mac 是一款适用于 Mac 的实用电池健康保护工具。以下是它的主要特点和优势: 软件下载地址 一、保护电池寿命的原理 锂离子和聚合物电池(如 Mac 笔记本中的电池)在 30% 到 80% 之间运行时使用寿命最长。始终将电池电量保持…

service 命令:管理系统服务

一、命令简介 ​service​ 命令是 Linux 系统中用于管理服务的工具,它通过调用位于 /etc/init.d/ ​目录下的服务脚本,来启动、停止、重启、查询状态等操作系统服务(守护进程)。service ​命令是一个便捷的 shell 脚本&#xff0…

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接:https://sysin.org/blog/windows-10-arm/,查看最新版。原创作品,转载请保留出处。 作者主页:s…

【VUE3.0】动手做一套像素风的前端UI组件库---Message

目录 引言自己整一个UI设计稿代码编写1. 设计信息窗口基础样式2. 设置打开和关闭的方法3. 编写实例化组件的js文件4. 看下最终效果5. 组件完整代码6. 组件调用方式 总结 引言 本教程基于前端UI样式库 NES.css 的UI设计,自行研究复现。欢迎大家交流优化实现方法~ 此次…

深度学习(3):Tensor和Optimizer

文章目录 是什么Tensor1. Tensor 的基本概念2. 自动求导(Autograd)机制3. requires_grad 属性4. .data 和 .item()5. 梯度清零 Optimizer 是什么 Tensor(张量):在 PyTorch 中,Tensor 是一种多维数组&#…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算(化为基本型)1.5.1 主对角线行列式:主…

基于数据挖掘的航空客户满意度分析预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求,包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等,并希望以此提升乘…

SQL面试常见题目

SQL面试常见题目涉及多个方面,包括数据查询、数据操作、表的设计与优化等。以下列举一些经典的SQL面试题目,并附上解析答案: 1. 查询一张表中重复的数据 题目: 给定一个表 employees,包含 id, name, salary 列。如何…

python基础题练习

1.可否定义一个sum函数呢?返回指定区间的值的和?例如,区间[1,4]的和为123410返回指定区间值的平方的和呢?立方呢? 代码: # 计算从start到end(包括end)的所有整数的和。 def sum_ra…

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制,不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组,但是实际上应该还没有支持。AutoX.js的http也是这样,但是AutoX.js还支持…

P7557 [USACO21OPEN] Acowdemia S题解

[USACO21OPEN] Acowdemia S 题目描述 由于对计算机科学的热爱,以及有朝一日成为 「Bessie 博士」的诱惑,奶牛 Bessie 开始攻读计算机科学博士学位。经过一段时间的学术研究,她已经发表了 N N N 篇论文( 1 ≤ N ≤ 1 0 5 1 \leq…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面:输入url就可以直接访问授权页面:登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

关于预处理的一系列问题

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 2. #define定义常量 #define name stuff 如果定义的 stuff过⻓&#xff0c;可以分成⼏⾏写&#xff0c;除了最后⼀⾏外&#xff0c;每⾏的后⾯都加⼀个反…

基于深度学习的可再生能源的效率优化

基于深度学习的可再生能源效率优化是一种应用先进人工智能技术来提升太阳能、风能、水能等可再生能源的生产和利用效率的策略。可再生能源的生产效率通常受限于不稳定的自然条件&#xff08;如日照、风速等&#xff09;&#xff0c;深度学习能够通过分析历史数据和实时环境信息…