【问题标题】:How to write a conditional filter query in SQLAlchemy如何在 SQLAlchemy 中编写条件过滤器查询
【发布时间】:2022-08-24 18:45:06
【问题描述】:

我是 sqlAlchemy 的新手。 我想将现有的 SQL 查询转换为 sqlAlchemy。

条件是(如果名字变量不为空,则使用 firstName 显示结果,否则忽略)

...
AND (:FirstName is NULL 
   OR UPPER (employee.firstname) LIKE UPPER (\'{firstName}\'||\'%\'))
AND (:LasttName is NULL 
   OR UPPER (employee.firstname) LIKE UPPER (\'{lastName}\'||\'%\'))

    标签: sql sqlalchemy


    【解决方案1】:

    您可以使用 sqlalchemy 函数执行此操作:

    from sqlalchemy import func, or_, and_
    
    db.session.query(
      employee
    ).filter(
      or_(
        employee.firstname == None,
        employee.firstname.ilike('...')
      )
      # add other filters if needed (and assumed)
    )
    

    希望它有所帮助。

    【讨论】:

    • 当名字有一些价值时工作。但是如果在请求中 firstname="" 它返回不匹配但理想情况下我希望这样做是返回所有响应并忽略 firstname 过滤器。我在这里遗漏了什么?
    • @codeRider,我不确定我是否理解。 null 和 "" 是不同的值。你总是可以组合嵌套各种and_/or_条件。这是一些文档docs.sqlalchemy.org/en/14/core/…
    • 它起作用了,你说得对,我只是删除了 None 并将 "" 保留在 None 条件下,它就像魅力一样。非常感谢
    • 很高兴它成功了!
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多