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

news2024/9/24 23:39:00

注意:在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 db


app=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").fetchall
   print(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.text


   def test_delete(self,url,data={})
      res = requests.delete(url,params=data)#发送请求时url接收的是函数参数中url具体的值,params接受的是函数参数中data具体的值
      return res.text

  
   def test_post(self,url,data={})
      res=requests.post(url,data=data)
      return res.text

  
   def test_put(self,url,data={})
      res=requests.put(url,data=data)
      return res.text


if __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.coloradmin.cn/o/2161793.html

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

相关文章

ubuntu下检查端口是否占用问题,编写shell脚本检查端口是否占用

1.创建脚本 touch check_port.sh2.粘贴以下内容到check_port.sh中 #!/bin/bash# 检查端口是否被占用的函数 check_port() {local port80local result$(sudo lsof -i:$port)if [[ -z "$result" ]]; thenecho "端口 $port 未被占用。"elseecho "警告:…

水电站/水库大坝安全监测系统完整解决方案

一、背景 在当今社会,随着全球对清洁能源需求的日益增长,水电站作为可再生能源的重要组成部分,其安全稳定运行显得尤为重要。水电站,尤其是大型水库大坝,不仅承载着发电、防洪、灌溉等多重功能,还直接关系…

二分查找法求解一元三次方程组

本题使用二分查找求解 #include <iostream> #include <algorithm> #include <cmath> using namespace std;double a,b,c,d;// 求出方程的值 double f(double x) {return a*pow(x,3)b*pow(x,2)c*xd; }void find(double l,double r) {// 若精度在可控范围内…

每日一练:二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 一、题目要求 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,n…

Python常见Json对比库deepdiff、json_tools、jsonpatch

对比两个json对象差异&#xff0c;常见的第三方对比库deepdiff、json_tools、jsonpatch都能够满足我们的需求。 用法&#xff1a; deepdiff from deepdiff import DeepDiffa {"name": "yanan", "pro": {"sh": "shandong"…

【微服务即时通讯系统】——etcd一致性键值存储系统,etcd的介绍,etcd的安装,etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

第十五章 文件上传

目录 一、文件上传注意点 二、JavaWeb上传文件的核心 三、常规的JavaWeb上传实现 四、运行效果 一、文件上传注意点 1. 为保证服务器安全&#xff0c;上传文件应该放在外界无法直接访问的目录下&#xff0c;比如放于WEB-INF目录下。 2. 为防止文件覆盖的现象发生&#xff…

[万字长文]stable diffusion代码阅读笔记

stable diffusion代码阅读笔记 获得更好的阅读体验可以转到我的博客y0k1n0的小破站 本文参考的配置文件信息: AutoencoderKL:stable-diffusion\configs\autoencoder\autoencoder_kl_32x32x4.yaml latent-diffusion:stable-diffusion\configs\latent-diffusion\lsun_churches-ld…

Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)

Unity 3D GUI 简介 游戏开发过程中&#xff0c;开发人员往往会通过制作大量的图形用户界面&#xff08; Graphical User Interface&#xff0c;GUI &#xff09;来增强游戏与玩家的交互性。 Unity 3D 中的图形系统分为 OnGUI、NGUI、UGUI等&#xff0c;这些类型的图形系统内容…

springboot项目引入了第三方jar包

应该把jar包放在resource目录下&#xff0c;新建一个lib目录放进去&#xff0c;不然打包的时候会报错找不到jar包&#xff0c;放入jar包&#xff0c;右键添加到库&#xff0c;才可以使用。 _g().startMarquee();

解决方案 | 镭速助力动漫游戏行业突破跨网文件交换瓶颈

在数字化浪潮推动下&#xff0c;动漫游戏行业蓬勃发展。随着高清技术的普及和云游戏的兴起&#xff0c;动漫游戏行业对动画的画质要求越来越高&#xff0c;数据量呈现爆炸式增长。然而&#xff0c;行业内的跨网文件交换难题也日益凸显&#xff0c;成为制约行业发展的瓶颈。 行业…

RTE大会报名丨 重塑语音交互:音频技术和 Voice AI,RTE2024 技术专场第一弹!

Voice AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频爆炸增长&#xff0c;新一代编解码技术将面临何种挑战&#xff1f; 当大模型进化到实时多模态&#xff0c;又将诞生什么样的新场景和玩法&#xff1f; 所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0…

考研数据结构——C语言实现插入排序

插入排序是一种简单直观的比较排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place&#xff08;原地排序&#xff09;&#…

BUUCTF [SCTF2019]电单车

使用audacity打开&#xff0c;发现是一段PT2242 信号 PT2242信号 有长有短&#xff0c;短的为0&#xff0c;长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…

neo4j小白入门

1.建立几个学校的节点 1.1创建一个节点的Cypher命令 create (Variable:Lable {Key1:Value,Key2,Value2}) return Variable 1.2创建一个学校的节点 create (n:School{name:清华大学,code: 10003,establishmentDate:date ("1911-04-29")})return n 1.3一次创建几个…

Ribbon布局和尺寸调整

Ribbon布局和尺寸调整 在本文中 Ribbon大小调整概述 默认大小调整行为 指定自定义调整大小行为 控件级调整 Ribbon使用自适应布局和调整大小来呈现各种窗口大小的最佳控件布局。Ribbon提供默认的大小调整行为&#xff0c;适用于许多常见场景。WPF的Microsoft Ribbon还提供了一…

【可图(Kolors)部署与使用】大规模文本到图像生成模型部署与使用教程

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 1.Kolors 简介 1.1.什么是Kolors&#xff1f; 开发团队 Kolors 是由快手 Kolors 团队…

组合优化与凸优化 学习笔记4 凸优化问题

优化问题基本定义 假如f(x)是方圆R以内&#xff08;R只要大于0就行&#xff09;最好的一个解 等价问题 就是这种优化函数没啥区别&#xff08;乘了个系数&#xff09;&#xff0c;约束们也就多了个系数的情况&#xff0c;这和原本的显然一样。这是等价的最简单的例子。 归根结…

MES系统如何提升制造企业的运营效率和灵活性

参考拓展&#xff1a;苏州稳联-西门子MES系统-赋能智能制造的核心引擎 制造执行系统(MES)在提升制造企业运营效率和灵活性方面发挥着关键作用。 一、MES系统的基本概念和功能 MES系统是连接企业管理层与生产现场的重要桥梁。它主要负责生产调度、资源管理、质量控制等多个方…

【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760

本文涉及的基础知识点 基础数学 LeetCode2121. 相同元素的间隔之和 难度分&#xff1a;1760 令2165&#xff0c;和此题几乎相等。 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地&#xff0c;arr[i] 和…