• Flask 学习85.FlaskSQLAlchemy 多个不确定条件查询 上海


    前言

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

    filter()和filter_by() 的使用

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

    主要区别

    模块 参数 大于(>)和小于(<) and_、or_、like、in_
    filter_by() 直接用属性名,比较用= 不支持 不支持
    filter() 用类名.属性名,比较用== 支持 支持

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

    Students.query.filter_by(name='yoyo').all()
    

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

    Students.query.filter_by(name='yoyo', age=20).all()
    

    等价于filter查询

    Students.query.filter(Students.name == 'yoyo').all()
    Students.query.filter(Students.name == 'yoyo', Students.age == 20).all()
    

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

    
    # 大于 >
    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的数据先从字典剔除,如下示例

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

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

    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

  • 相关阅读:
    INFORMATION_SCHEMA.COLUMNS表的字段信息
    如何取得一个数据表的所有列名
    CASE 函数
    Js定制窗口
    获取当前数据库中的所有用户表
    Js让状态栏不显示链接地址
    RA病人关节残障与软骨破坏而非骨破坏相关
    抗阿达木单抗的抗体可能与阿达木单抗治疗过程中静脉和动脉血栓事件相关
    长期应用阿达木单抗时所产生的抗抗体会影响疗效
    多普勒超声预测抗TNFα治疗类风湿关节炎患者的有效性:一项前瞻性队列研究
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16751396.html
Copyright © 2020-2023  润新知