关于Flask-SQLAlchemy中的多关键字过滤查询

单字段过滤(某一个键符合即可)

from sqlalchemy import or_

all_results =Model.query.filter(
                            or_(Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
                            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
                            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
                            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else "")
                            ).all()

多字段过滤(多个键同时符合)

all_results =Model.query.filter(
                            Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
                            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
                            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
                            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else ""
                            ).all()

先根据一个键过滤,然后再单字段过滤

from sqlalchemy import or_

all_results =Model.query.filter_by(id=_id).filter(
                            or_(Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
                            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
                            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
                            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else "")
                            ).all()

先根据一个键过滤,然后再多字段过滤

all_results =Model.query.filter_by(id=_id).filter(
                            Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
                            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
                            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
                            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else ""
                            ).all()

search_value为单过滤字段(模糊过滤字段),
如果模糊过滤字段为空,则进行精准过滤,
如果精准过滤字段为空,则进行模糊过滤,
如果模糊字段与精准字段都不为空,则先进行模糊过滤,然后对结果再进行精准过滤。

from sqlalchemy import or_

if search_value == '':
    all_results =Model.query.filter_by(id=_id).filter(
        Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
        Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
        Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
        Model.key_4.like("%" + words_4 + "%") if words_4 is not None else ""
            ).all()
elif words_1 == '' and words_2 == '' and words_3 == '' and words_4 == '':
    all_results =Model.query.filter_by(id=_id).filter(
        or_(Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else "")
        ).all()
else:
    all_results =Model.query.filter_by(id=_id).filter(
        or_(Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
            Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
            Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
            Model.key_4.like("%" + words_4 + "%") if words_4 is not None else "")
        ).filter(Model.key_1.like("%" + words_1 + "%") if words_1 is not None else "",
                 Model.key_2.like("%" + words_2 + "%") if words_2 is not None else "",
                 Model.key_3.like("%" + words_3 + "%") if words_3 is not None else "",
                 Model.key_4.like("%" + words_4 + "%") if words_4 is not None else ""
        ).all()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,794评论 25 709
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,868评论 0 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • “有一句话,我只问这一次,以后都不会再问,为什么是我?” “答案很长,我准备用一生的时间来回答,你准备好要听了吗?...
    北方honey阅读 422评论 2 1