Flask-SQLAlchemy精确查询&模糊查询---ORM
本文最后更新于1162天前,其中的信息可能已经有所发展或是发生改变。

0.背景知识

students表格

ST_IDNAMEGENDERAGECLASSIDREMARK
10001小明11821小明是位可爱的孩子
10002小红01822小红是位聪明的孩子
10003大牛11921大牛是位勇敢的孩子
10004花花01722花花是位懂事的孩子
10005tony12023tony来自美国
10006古天乐12221黑马王子
10007陈道明12322不是所有牛奶都叫特仑苏

1.精确查询

1.单条件–精确查询

 from db_modules import Students
 from flask_restful import reqparse, Resource
 ​
 ​
 class StudentsAPI(Resource):
     def __init__(self):
         self.parser = reqparse.RequestParser()
         self.parser.add_argument("st_id", type=str)
         self.parser.add_argument("name", type=str)
         self.parser.add_argument("classID", type=str)
         self.parser.add_argument("remark", type=str)
 ​
     def get(self):
         args = self.parser.parse_args()
 ​
         key_st_id = args.st_id
         key_name = args.name
         key_classID = args.classID
         key_remark = args.remark
 ​
         all_results = Students.query.filter_by(classID=key_classID).all()
 ​
         data_list = list()
         if all_results:
             for i in all_results:
                 dict_one = i.to_dict()
                 print(dict_one, "--------")
                 data_list.append(dict_one)
 ​
             value_msg = "success"
         else:
             value_msg = "couldn't search any infomation"
 ​
         result = {
 ​
             "status": 200,
             "msg": value_msg,
             "result": data_list
 ​
        }
         return result
         
 ​

输入的内容为:http://127.0.0.1:5000/student?classID=21

 {
 status: 200,
 msg: "success",
 result: [
             {
             classID: 21,
             gender: "1",
             st_id: 10001,
             remark: "小明是位可爱的孩子",
             age: 18,
             name: "小明"
             },
             {
             classID: 21,
             gender: "1",
             st_id: 10003,
             remark: "大牛是位勇敢的孩子",
             age: 19,
             name: "大牛"
             },
             {
             classID: 21,
             gender: "1",
             st_id: 10006,
             remark: "黑马王子",
             age: 22,
             name: "古天乐"
             }
         ]
 }
 

2.多条件–精确查询

 # 只有一行有变化,如下方式查询即可
 ​
 all_results = Students.query.filter_by(classID=key_classID, name=key_name).all()
 ​
 ​

2.模糊查询

1.单条件–模糊查询

 from db_modules import Students
 from flask_restful import reqparse, Resource
 ​
 ​
 class StudentsAPI(Resource):
     def __init__(self):
         self.parser = reqparse.RequestParser()
         self.parser.add_argument("st_id", type=str)
         self.parser.add_argument("name", type=str)
         self.parser.add_argument("classID", type=str)
         self.parser.add_argument("remark", type=str)
 ​
     def get(self):
         args = self.parser.parse_args()
 ​
         key_st_id = args.st_id
         key_name = args.name
         key_classID = args.classID
         key_remark = args.remark
 ​
         all_results = Students.query.filter(
             Students.remark.like("%" + key_remark + "%") if key_remark is not None else ""
        ).all()
 ​
         data_list = list()
         if all_results:
             for i in all_results:
                 dict_one = i.to_dict()
                 print(dict_one, "--------")
                 data_list.append(dict_one)
 ​
             value_msg = "success"
         else:
             value_msg = "couldn't search any infomation"
 ​
         result = {
 ​
             "status": 200,
             "msg": value_msg,
             "result": data_list
 ​
        }
         return result
 ​
 ​
 ​

浏览器输入:http://127.0.0.1:5000/student?remark=牛奶

 {
  status: 200,
  msg: "success",
  result: [
  {
  classID: 22,
  gender: "1",
  st_id: 10007,
  remark: "不是所有牛奶都叫特仑苏",
  age: 23,
  name: "陈道明"
  }
  ]
 }

2.多条件–模糊查询

  all_results = Students.query.filter(
      Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
      Students.name.like("%" + key_name + "%") if key_name is not None else "",
      Students.remark.like("%" + key_remark + "%") if key_remark is not None else "",
      Students.classID.like("%" + key_classID + "%") if key_classID is not None else ""
  ).all()

输入地址:http://127.0.0.1:5000/student?name=

 {
  status: 200,
  msg: "success",
  result: [
  {
  classID: 21,
  gender: "1",
  st_id: 10001,
  remark: "小明是位可爱的孩子",
  age: 18,
  name: "小明"
  },
  {
  classID: 22,
  gender: "1",
  st_id: 10007,
  remark: "不是所有牛奶都叫特仑苏",
  age: 23,
  name: "陈道明"
  }
  ]
 }

3.精确 & 模糊混合查询

1.先精确查询----再模糊查询

  all_results = Students.query.filter_by(classID = key_classID).filter(
      Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
      Students.name.like("%" + key_name + "%") if key_name is not None else "",
      Students.remark.like("%" + key_remark + "%") if key_remark is not None else ""
  ).all()
 ​

输入地址:http://127.0.0.1:5000/student?name=明&classID=24

 {
  status: 200,
  msg: "couldn't search any infomation",
  result: [ ]
 }
 ​

输入地址:http://127.0.0.1:5000/student?name=明&classID=22

 {
  status: 200,
  msg: "success",
  result: [
  {
  classID: 22,
  gender: "1",
  st_id: 10007,
  remark: "不是所有牛奶都叫特仑苏",
  age: 23,
  name: "陈道明"
  }
  ]
 }

4.多条件或查询(or_)

 from sqlalchemy import or_   # 这个是需要额外导入的方法
 ​
 ​
 all_results = Students.query.filter(
             or_(Students.st_id.like("%" + key_st_id + "%") if key_st_id is not None else "",
                 Students.name.like("%" + key_name + "%") if key_name is not None else "",
                 Students.remark.like("%" + key_remark + "%") if key_remark is not None else "",
                 Students.classID.like("%" + key_classID + "%") if key_classID is not None else "")
        ).all()
 ​
 ​

浏览器输入:http://127.0.0.1:5000/student?name=花&st_id=10005&remark=牛奶 多个条件,每个条件单独满足即可,最终结果为所有集合的汇总

 {
 status: 200,
 msg: "success",
 result: [
  {
  classID: 22,
  gender: "0",
  st_id: 10004,
  remark: "花花是位懂事的孩子",
  age: 17,
  name: "花花"
  },
  {
  classID: 23,
  gender: "1",
  st_id: 10005,
  remark: "tony来自美国",
  age: 20,
  name: "tony"
  },
  {
  classID: 22,
  gender: "1",
  st_id: 10007,
  remark: "不是所有牛奶都叫特仑苏",
  age: 23,
  name: "陈道明"
  }
  ]
 }

点击数:38

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇