前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-85.Flask-SQLAlchemy 多个不确定条件查询

Flask 学习-85.Flask-SQLAlchemy 多个不确定条件查询

作者头像
上海-悠悠
发布2022-10-09 11:40:18
2.2K0
发布2022-10-09 11:40:18
举报

前言

在后台管理数据的时候,经常会有多个条件查询,查询参数可以是一个也可以是多个,如果没有查询参数就返回全部数据。

filter()和filter_by() 的使用

SQLAlchemy 使用query查询的时,可以使用filter()和filter_by() 过滤条件。 filter_by() 参数直接用属性名,比较用一个= filter() 参数 用类名.属性名,比较用 ==

主要区别

模块

参数

大于(>)和小于(<)

and、or、like、in_

filter_by()

直接用属性名,比较用=

不支持

不支持

filter()

用类名.属性名,比较用==

支持

支持

filterby() 只能筛选条件等于,不支持 大于 (>)和小于 (<)和 and、or_查询

代码语言:javascript
复制
Students.query.filter_by(name='yoyo').all()

如果需要满足多个条件,查询name名称等于’yoyo’, 并且年龄age等于20,中间用逗号隔开

代码语言:javascript
复制
Students.query.filter_by(name='yoyo', age=20).all()

等价于filter查询

代码语言:javascript
复制
Students.query.filter(Students.name == 'yoyo').all()
Students.query.filter(Students.name == 'yoyo', Students.age == 20).all()

filter() 除了可以支持判断等于,还可以支持 大于 (>)和小于 (<)和 and、or、like、in_查询

代码语言:javascript
复制
# 大于 >
Students.query.filter(Students.age > 20).all()

# 小于 <

Students.query.filter(Students.age < 20).all()

# and_ 查询
Students.query.filter(and_(Students.name == 'yoyo', Students.age == 20)).all()

# or_查询
Students.query.filter(or_(Students.id >= 1, Students.name == 'yoyo')).all()

# like 模糊匹配
Students.query.filter(Students.name.like('%yoyo%')).all()

# _in包含

Students.query.filter(Students.name.in_(['yoyo', 'yoyo1'])).all()

多个条件查询

多个条件查询,并且条件的个数不确定,用filter_by() 只能判断相等和不相等,无法模糊匹配. 如果用filter_by()可以把查询的条件写的一个字典,为None的数据先从字典剔除,如下示例

代码语言:javascript
复制
query_dict = {
    "name": "zhangsan",
    "age": 22
}
# 剔除query_dict参数为空的数据后
Students.query.filter_by(**query_dict)

使用filter() 查询功能更灵活,所以大部分会使用filter() 结合 _or

代码语言:javascript
复制
students_filter = Students.query.filter(
        or_(Students.name == name, name == None),
        or_(Students.tel == tel, tel == None),
        or_(Students.email == email, email == None),
    ).all()

get请求query传参/api/student?name=yoyo&tel=12222

参考教程https://blog.csdn.net/lilygg/article/details/115006334

2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • filter()和filter_by() 的使用
  • 多个条件查询
    • 报名费:报名费3000一人(周期3个月)
      • 联系微信/QQ:283340479
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档