我被困在这个数据库搜索问题上: 我有一个带有不同复选框的PyQt5小部件。它们每个代表我数据库中的一列。例如,“ worker_name”和“ department”。复选框位于lineEdits附近,因此用户可以在该lineEdit中插入一些文本,而不是单击checkBox和“查找”按钮。
比方说,用户在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)
但是,如果我有很多复选框(与数据库表中的列一样多),而我不知道将按下哪个复选框,该怎么办呢?在这种情况下,我应该如何形成查询?我的意思是我将拥有“ wrk_name”,“部门”和“ date”,并且用户只能通过“ worker_name”或“ worker_name” +“ date”或所有复选框进行搜索。
是否有任何方法可以动态地依赖于给定的参数以及不将其包含在'filter_by'/'filter中或仅忽略它们的参数来动态地形成数据库查询。
请分享您对此类功能的可能实现的想法。谢谢。
答案 0 :(得分:1)
请记住,所有内容都是python中的对象,因此您可以动态构建过滤器列表,并将其传递给filter()(或任何其他)方法。一些伪代码来说明这个概念:
flist = []
for inp in input:
flist.append(Table.column == inp.property)
db.query(Table).filter(*flist)