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.xdnf.cn/news/150262.html

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

相关文章

【论文翻译】AFLGuard: Byzantine-robust Asynchronous Federated Learning

提示:该论文标题为AFLGuard: Byzantine-robust Asynchronous Federated Learning,我将对其进行部分翻译,便于后续阅读。 文章目录 AFLGuard:拜占庭鲁棒的异步联邦学习一、摘要二、引言三、知识前提拜占庭鲁棒联邦学习 四、问题表述…

排序(插入,希尔,堆排)

常见的排序算法: 插入排序: 直接插入排序:是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个…

mysql如何替换数据库所有表中某些字段含有的特定值

目录 背景查询所有表名查询表的所有字段过虑特征字段替换字段中含有的特定值 背景 公司的测试域名更换了,导致存放在数据库中的域名也要跟着替换,当然把域名存放在数据库表中是不科学的,不建议这样做,但公司的同事就这样做了&…

AWS开启MFA,提高安全性

引言 多因素认证(Multi-Factor Authentication, MFA)是一种重要的安全措施,可以显著提高您的AWS账号的安全性。通过启用MFA,即使密码被盗,攻击者也难以访问您的账户。本文中九河云将详细介绍如何在AWS Management Con…

element-plus表格操作

elememt-plus安装见上文 表格的特性 element-plus中的表格和原版表格最大的不同是写法不同,原版表格以行的方式写,element-plus以列的方式写。 element-plus的表格可以更方便的展示数据,只需要考虑数据的格式即可。 表格标签 表格标签有两种…

LeetCode 257. 二叉树的所有路径,dfs

LeetCode 257. 二叉树的所有路径 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 目录 LeetCode 257. 二叉树的所有路径算法选择数据结构解题步骤算法流程算法代码算法分析易错点和注意事项相似题目 算法选择 深度优…

Web端云剪辑解决方案,提供多轨视频、音频、特效、字幕轨道可视化编辑

传统视频剪辑软件的繁琐安装、高昂硬件要求以及跨平台协作的局限性,让无数创意者望而却步。美摄科技作为云端视频编辑技术的领航者,携其革命性的Web端云剪辑解决方案,正重新定义视频创作的边界,让专业级视频剪辑触手可及&#xff…

k8s StorageClass 存储类

文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner(存储制备器)1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy(回收策略)3、allowVolumeExpansion(允许…

多线程:死锁

目录 死锁的条件 死锁的示例 死锁的预防与解决 死锁的检测 总结 死锁(Deadlock)是多线程或多进程环境中一种特定的状态,指的是两个或多个线程或进程在执行过程中,由于争夺资源而造成的一种相互等待的状态,导致它们…

Linux usb主机控制器HC阅读

intel的UHCI 一种usb主机控制器的接口规范,遵守它的硬件称为UHCI主机控制器,Linux中,把这种硬件叫做HC,host controller,与之对应的软件,叫做HCD,hc driver, depends on usb & pci: 它的内核软件模块代码是uhci-hcd.c uhci_hcd_init初始化开始: usb_disable函数:…

【openwrt】 libubox组件——ustream

文章目录 ustream 核心数据结构struct ustreamstruct ustream_buf_liststruct ustream_bufstruct ustream_fd ustream 核心APIustream_fd_initustream_uloop_cbustream_fd_read_pendingustream_fill_read ustream_write_pendingustream_writeustream_fd_write ustream 应用示例…

前端开发必须了解的css知识

文本过长省略显示 单行 .ellipsis {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }多行 方法一: .ellipsis {overflow: hidden;text-overflow: ellipsis;-webkit-line-clamp: 3;word-break: break-all; }方法二: .ellipsis {ove…

文献笔记 - Neural Lander: Stable Drone Landing ControlUsing Learned Dynamics

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者,文献的引用格式如下,原文更有价值 [1]Guanya Shi∗,Xichen Shi∗,Michael OConnell∗,et al.Neural La…

LOGO设计新革命:5款AI工具让你秒变设计大师(必藏)

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 你是否曾因设计一个既独特又专业的LOGO而感…

Tableau|二 如何利用功能区创建视图

一 认识 Tableau 数据 1.数据角色 维度和度量是Tableau的一种数据角色划分,离散和连续是另一种划分方式。 1.维度和度量 维度往往是一些分类、时间方面的定性字段,将其拖放到功能区时,Tableau不会对其进行计算,而是对视图区进行分…

Swin Transformer(ICCV 2021 best paper):基于卷积层级式架构的移动窗口视觉Transformer!

有关ViT的学习笔记详见:学习笔记——ViT(Vision Transformer)-CSDN博客 ViT在图像分类方面的结果令人鼓舞,但由于其低分辨率的特征映射和复杂度随图像大小的二次方增长,其架构不适合作为密集视觉任务或高分辨率输入图像的backbone。根据经验&…

JetBrains系列产品无限重置免费试用方法

JetBrains系列产品无限重置免费试用方法 写在前面安装插件市场安装插件 写在前面 支持的产品: IntelliJ IDEA AppCode CLion DataGrip GoLand PhpStorm PyCharm Rider RubyMine WebStorm为了保证无限重置免费试用方法的稳定性,推荐下载安装2021.2.2及其…

OpenAI GPT-3 API error: “This model‘s maximum context length is 2049 tokens“

题意:OpenAI GPT-3 API 错误:“此模型的最大上下文长度是 2049 个token” 问题背景: I have two issues relating to the response result from OpenAI completion. 我遇到了两个与OpenAI完成响应结果相关的问题 The following result does…

Sam Altman的博客:The Intelligence Age

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

《深入解析:水果销售数据库操作与查询技巧》

文章目录 一、数据库结构与数据源插入1.1 创建数据库与表1.2 插入数据 二、基础数据查询2.1 查询客户信息2.2 查询供应商信息 三、查询优化与技巧3.1 使用LIMIT子句 四、高级查询技巧4.1 使用聚合函数4.2 连接查询4.3 使用子查询 五、案例分析5.1 客户订单详情查询 一、数据库结…