如何创建动态过滤器?

新手上路,请多包涵

我有一张设备表,每个设备都有维护级别的日期。用户可以选择维护级别。因此,我应该针对所选维护级别的每个组合调整我的 SQLAlchemy。例如:

 SELECT * WHERE (equipment IN []) AND m_level1 = DATE AND m_level2 = DATE ....)

因此,可以针对每个 if 条件进行组合,具体取决于复选框我使用多个字符串来达到我的目标,但我想使用 SQLAlchemy 改进查询。

原文由 Lorenzo Simonassi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 483
2 个回答

我假设您正在使用 ORM。

在这种情况下, filter 函数返回一个查询对象。您可以通过执行类似的操作有条件地构建查询

query = Session.query(schema.Object).filter_by(attribute=value)
if condition:
    query = query.filter_by(condition_attr=condition_val)
if another_condition:
    query = query.filter_by(another=another_val)

#then finally execute it

results = query.all()

原文由 Busturdust 发布,翻译遵循 CC BY-SA 3.0 许可协议

函数 filter(*criterion) 意味着你可以使用元组作为它的参数,@Wolph 在这里有详细信息: SQLALchemy dynamic filter_by for detail

原文由 chenxin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题