Flask请求器对象和排序

请求器对象

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")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值