当前位置: 首页 > article >正文

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 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.kler.cn/a/328310.html

相关文章:

  • Vscode 远程切换Python虚拟环境
  • 鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
  • RPA真的是人工智能吗?
  • 【AI图像生成网站Golang】项目架构
  • OCRSpace申请free api流程
  • Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
  • k8s 1.28.2 集群部署 ingress 1.11.1 包含 admission-webhook
  • Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
  • 开发微信小程序 基础03
  • scala 2.12 error: value foreach is not a member of Object
  • 低代码用户中心:构建高效便捷的用户管理平台
  • VUE 开发——AJAX学习(二)
  • 51单片机学习第五课---B站UP主江协科技
  • 【网络安全】消息鉴别
  • 五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步
  • Require:基于雪花算法完成一个局部随机,全局离散没有热点切唯一的数值Id生成器。
  • FileLink跨网文件交换:高效、安全、灵活的企业文件传输新方案
  • 力扣10.1
  • 5QI(5G QoS Identifier)
  • 《Linux从小白到高手》理论篇(二):Linux的目录结构和磁盘管理
  • 基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
  • python画图|自制渐变柱状图
  • 鸿蒙开发(NEXT/API 12)【穿戴设备信息查询】手机侧应用开发
  • 影院管理新篇章:小徐的Spring Boot应用
  • 低代码时代的企业信息化:规范与标准化的重要性
  • Redis: Sentinel哨兵监控架构及环境搭建