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

相关推荐
没书读了18 分钟前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·25 分钟前
java基础面试题笔记(基础篇)
java·笔记·python
i道i1 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl1 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502771 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空1 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
小喵要摸鱼2 小时前
Python 神经网络项目常用语法
python
Oak Zhang2 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
Kkooe3 小时前
GitLab|数据迁移
运维·服务器·git