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

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

时间:2024-09-24 22:22:12浏览次数:3  
标签:http 请求 get url db 改查 mysql 增删 data

注意:在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,请求,get,url,db,改查,mysql,增删,data
From: https://blog.csdn.net/m0_63178019/article/details/142478096

相关文章

  • Vue.config.js中配置Proxy代理HTTPS
    Vue.config.js中配置Proxy代理HTTPS基本概念与作用为什么要使用HTTPS代理?示例一:基础HTTPS代理配置示例二:多环境代理配置示例三:忽略某些路径示例四:支持WebSocket代理示例五:高级配置实际开发中的使用技巧在开发基于Vue.js的应用时,经常会遇到前后端分离的情况,即前端应......
  • 即时通讯安全篇(十):为什么要用HTTPS?深入浅出,探密短连接的安全性
    3、写在前面说到HTTPS,那就得回到HTTP协议。对于HTTP协议,大家肯定都熟得不能再熟了。那么HTTPS和HTTP的区别大家了解吗?对于这个经典的面试题,大部分人会这么回答:1)HTTPS比HTTP多了一个S(Secure):也就是说HTTPS是安全版的HTTP;2)端口号不同:HTTP使用80端口,HTTPS使用443端口;3)加密算法:H......
  • HTTP和https的区别以及post和get请求的区别
    HTTP(HyperTextTransferProtocol)和HTTPS(HyperTextTransferProtocolSecure)都是用于在客户端(如浏览器)和服务器之间传输数据的协议。它们的主要区别在于数据的安全性。1.基本定义HTTP:是最基本的超文本传输协议,用于将网页和其他资源从服务器传输到客户端。但传输过程中,数据......
  • docker 配置代理访问Error response from daemon: Get “https://index.docker.io/v1/
    一、前言报错原因,docker访问不到外网。并且docker不能直接依赖操作系统环境的proxy,因此需要独立配置docker的proxy才能访问外网。问题描述dockersearchmysql出现以下报错:[root@localhost~]#dockersearchmysqlErrorresponsefromdaemon:Get"https://index.docke......
  • 《HTTP协议入门:简单易懂的6个步骤!》
    HTTP协议HTTP方法HTTP状态码HTTP头信息HTTP消息结构HTTP请求格式:请求行(requestline)、请求头部(header)、空行和请求数据四个部分组成,HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。HTTP协议(HyperTextTransferProtocol,超文本传输协议)是因特网......
  • 万象更新 Html5 - js: js 的跨域请求 XMLHttpRequest
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-js:js的跨域请求XMLHttpRequest示例如下:js\XMLHttpRequest.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>XMLHttpR......
  • node-http模块:服务器与客户端
    HTTP服务器与客户端Node.js标准库提供了http模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端。http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层C++部分实现,而接口由JavaScript封装,兼顾了高性能与简易性。http.request则是一个HTTP客户......
  • POST请求:掌握HTTP协议的强大功能
    在网络编程和API交互中,HTTP协议扮演着至关重要的角色。POST请求,作为HTTP协议中的一个核心方法,广泛应用于数据提交、用户登录、表单处理等场景。本文将详细介绍POST请求的基本概念、使用场景以及如何在不同编程语言中实现POST请求。什么是POST请求?POST(PostMethod)是一种HTTP方法,......
  • 如何使用 Bittly 为基于 HTTP 的 API 快速创建 UI 操作界面
    在开发Web应用或服务时,通常会提供不同数量的API接口给客户端或其他第三方使用,当API数量达到一定数量的时候,在处理接口间的调用链以及参数关系时就会变得异常麻烦。在这种情况下便可通过Bittly的面板功能将这些API结构进行组装整理起来组成一个UI控制面板,从而......
  • Android面试:OkHttp 详解
    引言        在Android开发中,网络请求是不可或缺的一部分。OkHttp作为一款强大的HTTP客户端库,以其高效、易用和灵活的特点,成为了Android开发者的首选。本文将深入解析OkHttp的内部机制,包括其架构、基本使用、核心组件以及如何通过扩展来实现更丰富的功能。1......