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