【问题标题】:SQLAlchemy dynamic filter queries [duplicate]SQLAlchemy动态过滤器查询[重复]
【发布时间】:2019-03-10 07:30:41
【问题描述】:

我被这个数据库搜索问题困住了: 我有一个带有不同复选框的 PyQt5 小部件。它们中的每一个都代表我数据库中的一列。例如,“工人姓名”和“部门”。复选框放置在 lineEdits 附近,因此用户在此 lineEdit 中插入一些文本,而不是单击复选框和“查找”按钮。

假设用户在 lineEdit 中插入“John”,而不是按“worker_name”复选框并通过

session.query(Doc).filter_by('worker_name'=text_from_lineEdit)

如果用户在两个 lineEdits 中插入文本并按下两个复选框('worker_name' 和 'department'),查询将如下所示:

session.query(Doc).filter_by('worker_name'=text_from_lineEdit, 'department'=text_from_lineEdit_2)

但是,如果我有很多复选框(与 DB 表中的列一样多),我不知道哪些会被按下,哪些不会。在这种情况下我应该如何形成查询?我的意思是我将拥有 'wrk_name'、'department' 和 'date' 并且用户只能通过 'worker_name' 或 'worker_name' + 'date' 或所有复选框进行搜索。

有没有办法根据给出的参数动态形成数据库查询,哪些参数不包含在 'filter_by'/'filter 中或忽略。

请分享您对可能实现此类功能的想法。谢谢你的时间。

【问题讨论】:

标签: python sqlalchemy pyqt5


【解决方案1】:

请记住,python 中的一切都是对象,因此您可以动态构建过滤器列表并将其传递给 filter()(或任何其他)方法。一些伪代码来说明这个概念:

flist = []
for inp in input:
    flist.append(Table.column == inp.property)

db.query(Table).filter(*flist)

【讨论】:

猜你喜欢
  • 2015-01-15
  • 2017-06-15
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多