首页 > 其他 > 详细

flask中的部分查询操作

时间:2021-06-04 12:28:30      阅读:34      评论:0      收藏:0      [点我收藏+]

filter

比较

filter中支持 python中的所有比较运算符: ==!=><>=<=

from flask_restful import Resource, reqparse, marshal_with
from .models import Goods
from .fields import goods_fields
?
?
class GoodsView(Resource):
?
   @marshal_with(goods_fields)
   def get(self):
       # 1. 客户端传递 参数,
       parser = reqparse.RequestParser()
       parser.add_argument(‘sales‘, type=int, location=[‘args‘], default=0)
       
       sales = parser.parse_args().get(‘sales‘)
       
?
       # 2. 查询销量大于该参数的所有商品
       goods = Goods.query.filter(Goods.sales > sales).all()
       return goods
?

注意: 过滤完成之后,还需要调用 all()获取 查询的 结果

逻辑

from flask_restful import Resource, reqparse, marshal_with
from .models import Goods
from .fields import goods_fields
from sqlalchemy import or_, and_, not_
?
?
class GoodsView(Resource):
?
   @marshal_with(goods_fields)
   def get(self):
       # 1. 客户端传递 参数,
?
       parser = reqparse.RequestParser()
       parser.add_argument(‘sales‘, type=int, location=[‘args‘], default=0)
       parser.add_argument(‘stock‘, type=int, location=[‘args‘], default=0)
?
       sales = parser.parse_args().get(‘sales‘)
       stock = parser.parse_args().get(‘stock‘)
?
       # 2. 查询销量大于 某个数 或 库存小于 某个数 的商品信息
       goods = Goods.query.filter(or_(Goods.sales > sales, Goods.stock < stock)).all()
?
       return goods

 

from flask_restful import Resource, reqparse, marshal_with
from .models import Goods
from .fields import goods_fields
from sqlalchemy import or_, and_, not_
?
?
class GoodsView(Resource):
   @marshal_with(goods_fields)
   def get(self):
       # 1. 客户端传递 参数
       parser = reqparse.RequestParser()
       parser.add_argument(‘max_price‘, type=float, location=[‘args‘])
       parser.add_argument(‘min_price‘, type=float, location=[‘args‘])
?
       max_price = parser.parse_args().get(‘max_price‘)
       min_price = parser.parse_args().get(‘min_price‘)
?
       if (max_price is None) and (min_price is None):
           # 上限 和 下限 都没有
           goods = Goods.query.all()
           
       elif (max_price is None) and (min_price is not None):
           # 有 下限 ,没有 上限
           goods = Goods.query.filter(Goods.price >= min_price).all()
           
       elif (max_price is not None) and (min_price is None):
           # 有 上限 ,没有 下限
           goods = Goods.query.filter(Goods.price <= max_price).all()
           
       else:
           # 查询 价格在某个区间的商品信息
           goods = Goods.query.filter(and_(Goods.price >= min_price, Goods.price <= max_price)).all()
?
       return goods
?

 

  • 模型类.query.filter(模型类.字段 > 值).all(): 比较查询,支持所有比较运算符

  • 模型类.query.filter(or_(条件1, 条件2)).all(): 满足任何一个条件即可

  • 模型类.query.filter(and_(条件1, 条件2)).all(): 满足全部条件即可

  • 模型类.qery.filter(模型类.字段.in_([1, 2, 3, 4])): 查询某个字段是否 在某个 集合中,用来实现 批量操作

判断

# 查询库存不为空 的商品信息
goods = Goods.query.filter(not_(Goods.stock.is_(None))).all()
goods = Goods.query.filter(~(Goods.stock.is_(None))).all()
?
?
# id在某个区间的商品信息
goods = Goods.query.filter(Goods.id.in_([1, 3, 6, 7])).all()

模糊查询

from flask_restful import Resource, reqparse, marshal_with
from .models import Goods
from .fields import goods_fields
?
?
class GoodsView(Resource):
?
   @marshal_with(goods_fields)
   def get(self):
       #
       parser = reqparse.RequestParser()
       parser.add_argument(‘text‘, type=str, location=[‘args‘])
?
       text = parser.parse_args().get(‘text‘)
       # sql语句中的模糊查询中,
       # %: 代表 任意个任意字符
       # _: 代表一个任意字符
?
       # 查询商品名包含xxx的商品信息
       # goods = Goods.query.filter(Goods.name.like(‘%{}%‘.format(text))).all()
?
       # 查询 以 xx 开头 的商品信息
       goods = Goods.query.filter(Goods.name.like(‘{}%‘.format(text))).all()
?
       return goods

排序

from flask_restful import Resource, reqparse, marshal_with
from .models import Goods
from .fields import goods_fields
from sqlalchemy import desc, asc
?
?
class GoodsView(Resource):
?
   @marshal_with(goods_fields)
   def get(self):
       # 接收客户端发送的参数,按照参数进行排序
       parser = reqparse.RequestParser()
       parser.add_argument(‘params‘, type=str, location=[‘args‘])
?
       params = parser.parse_args().get(‘params‘)
?
       if params == ‘price‘:
           goods = Goods.query.order_by(‘price‘).all()
       elif params == ‘-price‘:
           goods = Goods.query.order_by(desc(‘price‘)).all()
       elif params == ‘sales‘:
           goods = Goods.query.order_by(‘sales‘).all()
       elif params == ‘-sales‘:
           goods = Goods.query.order_by(desc(‘sales‘)).all()
       else:
           goods = Goods.query.all()
?
       return goods

desc(字段): 按照字段 降序排序

asc(字段): 按照字段升序排序,不写asc也是升序排序

flask中的部分查询操作

原文:https://www.cnblogs.com/doomqy/p/14848110.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!