python - SQLAlchemy 动态过滤器查询
问题描述
我被困在这个数据库搜索问题上:我有一个带有不同复选框的 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”+“日期”或所有复选框进行搜索。
有没有办法根据给出的参数动态形成数据库查询,哪些参数不包含在“filter_by”/“过滤器中或只是忽略”。
请分享您对可能实现此类功能的想法。谢谢你的时间。
解决方案
请记住,python 中的一切都是对象,因此您可以动态构建过滤器列表并将其传递给 filter() (或任何其他)方法。一些伪代码来说明这个概念:
flist = []
for inp in input:
flist.append(Table.column == inp.property)
db.query(Table).filter(*flist)
推荐阅读
- r - FELM weights argument broken in R?
- arrays - Home work problem that I cant visualize to understand Python Numpy (Newbie)
- django - Django-filter 字段名称是一个 python 内置关键字
- arrays - 如何在 Flutter 中解析这个 JSON 数组?
- python - 使用变量时的Python SQLite3绑定错误
- rust - 在运行时查找结构的总大小
- python - 如何用另一个数据框中的值替换数据框中的缺失值?
- python - 返回 postgres 查询时 Psycopg2 无效的 json
- ubuntu - 是否可以仅在命令行上启动 Ubuntu 时运行 JavaFX?
- dask - Dask One 热编码器 handle_unknown="ignore",可以解决吗?