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

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

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

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

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

python 复制代码
  #查询数据库
  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中的配置:

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

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

python 复制代码
from config import *


app.config['SQLALCHEMY_DATABASE_URI']='mysql://{}:{}/@{}:{}/{}'.format(mysql_user,mysql_password,mysql_host,mysql_port,mysql_db)
python 复制代码
#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 ,如果不加上撇号引起来,会导致错误,到底是排序还是表名呢?

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

python 复制代码
#接口测试文件

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

相关推荐
yuzhiboyouye8 分钟前
内连接,左连接,右连接怎么区别开来?
数据库
明月_清风9 分钟前
FastAPI 从入门到实战:3 分钟构建高性能异步 API
后端·python·fastapi
bellus-16 分钟前
ubuntu26测试win10的ollama大模型性能
python
水木流年追梦17 分钟前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来17 分钟前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
铭毅天下23 分钟前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎
liuyunshengsir30 分钟前
PyTorch 动态量化(Dynamic Quantization)
人工智能·pytorch·python
muddjsv30 分钟前
SQL 最常用技能详解与实战示例
数据库·sql·mysql
电子云与长程纠缠39 分钟前
UE5制作六边形包裹球体效果
开发语言·python·ue5
DFT计算杂谈1 小时前
KPROJ编译教程
java·前端·python·算法·conda