请求器对象
from flask import Blueprint, jsonify
from flask_restful import Api, Resource, reqparse, request
from model.model import UserModel
from flask_restful.inputs import int_range
good_bp = Blueprint("good_bp", __name__, url_prefix="/good")
api = Api(good_bp)
class GoodView(Resource):
def get(self):
# id = request.args.get("id")
# title = request.args.get("title")
#
# print(id, title)
# 请求器对象获取
# 1.实例化请求对象
req = reqparse.RequestParser()
"""
type:校验数据类型,指定特殊类型 int_range(10, 20) 只能在10到20之间
help:参数校验不合格时返回指定话语
required=True:强制携带,不写报错
action="store" 保留出现第一个 默认
action="append" 以列表追加所有同名参数的值 [1, 2, 3]
location="" 指定从哪里获取数据,默认是从json,写一个会自动转换为大写
location=["headers","args"] 用列表指定多个请求头,字段名要大写 "Id"
default=18 默认值
choices=["男", "女"] 多选
"""
# 添加要获取的参数
# req.add_argument("id", type=int, help="id字段必须为整型",action="append")
# req.add_argument("id", type=int_range(10, 20), help="id只能在10-20之间",action="append")
req.add_argument("Id", location=["headers", "args"]) # 如果不指定参数,默认从json体获取 post体和查询参数获取
req.add_argument("title", required=False)
req.add_argument("age", default=18)
req.add_argument("sex", choices=["男", "女"])
# 启动参数校验 请求对象.parse_args()
args = req.parse_args()
print(args) # {'id': '1', 'title': '张三'} 不是字典类型
print(type(args)) # <class 'flask_restful.reqparse.Namespace'>
# 获取单个数据
title = args["title"]
id = args["Id"]
age = args["age"]
sex = args["sex"]
print(title)
print(id)
print(age)
print(sex)
# 优点一 无论你采用何种方式传参,请求器对象都可以获取到
api.add_resource(GoodView, "/good")
排序
class GoodView(Resource):
def post(self):
goods = UserModel.query.filter(UserModel.username == "张三").first()
# UserModel.query.filter_by(username="张三").first()
"""
offset(1):偏移一条
limit(1):分页,一页展示多少条数据
"""
# goods = UserModel.query.offset(1).limit(1).all()
page = 1
page_size = 10
goods = UserModel.query.offset((page - 1) * page_size).limit(1).all()
# 假设一页十条数据
# 那么第三页数据 应该是多少条到多少条 21-30
"""
asc()是升序,默认可以省略
desc()是降序
"""
# goods = UserModel.query.order_by(UserModel.age.asc()).all()
goods = UserModel.query.order_by(UserModel.age).all()
goods = UserModel.query.order_by(UserModel.age.desc()).all()
goods = UserModel.query.order_by(UserModel.age.desc()).order_by(UserModel.username.desc()).all()
"""
条件查询 需要导包
or_ and_ not_
"""
from sqlalchemy import or_, and_, not_
goods = UserModel.query.filter(or_(UserModel.id == 1, UserModel.username == "张三")).all()
goods = UserModel.query.filter(and_(UserModel.age == 18, UserModel.username == "张三")).all()
goods = UserModel.query.filter(not_(UserModel.id == 1)).all()
goods = UserModel.query.filter(UserModel.age == 18).filter(UserModel.username == "张三").all()
"""
条件分开写,可以区别某个条件
"""
query = UserModel.query
query = query.filter(UserModel.username == "张三")
query = query.filter(UserModel.age == 18)
query = query.all()
"""
比较运算
__lt__ 小于
__le__ 小于等于
__gt__ 大于
__ge__ 大于等于
"""
goods = UserModel.query.filter(UserModel.id.__lt__(3)).all()
goods = UserModel.query.filter(UserModel.id.__le__(3)).all()
goods = UserModel.query.filter(UserModel.id.__gt__(3)).all()
goods = UserModel.query.filter(UserModel.id.__ge__(3)).all()
"""
in_ 查询 在...里 不需要导包, 模型类.字段.in_((条件,))
"""
goods = UserModel.query.filter(UserModel.id.in_((1, 2, 3))).all()
"""
聚合查询
max() 最大值
min() 最小值
sum() 求和
avg() 求平均数
"""
from model.model import db
from sqlalchemy import func
max_id = db.session.query(func.max(UserModel.id)).first()[0]
max_id = db.session.query(func.count(UserModel.id)).first()[0]
max_id = db.session.query(func.sum(UserModel.id)).first()[0]
max_id = db.session.query(func.avg(UserModel.id)).first()[0]
# 结果是一个元组,例如(3,) [0]取出第一位 3
print(max_id)
temp = []
for i in goods:
temp_dict = {
"id": i.id,
"username": i.username,
"money": float(i.money) # 小数要进行强转 float() str()
}
temp.append(temp_dict)
return jsonify({"code": 200, "msg": "数据查询成功", "data": temp})
api.add_resource(GoodView, "/good")