我知道你可以通过提供**kwargs来为SQLAlchemy的查询构建动态过滤器filter_by.
例如
filters = {'id': '123456', 'amount': '232'}
db.session.query(Transaction).filter_by(**filters)
Run Code Online (Sandbox Code Playgroud)
以下是我的问题:
如果我需要通过"大于"或"小于"条款查询,该怎么办?例如(原始SQL):
select * from transaction t
where t.amount > 10 and t.amount < 100;
Run Code Online (Sandbox Code Playgroud) 我陷入了这个数据库搜索问题:我有一个带有不同复选框的 PyQt5 小部件。它们中的每一个都代表我数据库中的一列。例如,“worker_name”和“department”。复选框放置在行编辑附近,因此用户可以在该行编辑中插入一些文本,然后单击复选框和“查找”按钮。
比方说,用户在 lineEdit 中插入“John”,然后按“worker_name”复选框并通过以下方式获取该工人的所有文档
session.query(Doc).filter_by('worker_name'=text_from_lineEdit)
Run Code Online (Sandbox Code Playgroud)
如果用户在两个行编辑中插入文本并按下两个复选框(“worker_name”和“department”),查询将如下所示:
session.query(Doc).filter_by('worker_name'=text_from_lineEdit, 'department'=text_from_lineEdit_2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我有很多复选框(与数据库表中的列一样多)并且我不知道其中哪些会被按下,哪些不会被按下,该怎么办?在这种情况下我应该如何形成查询?我的意思是我将有“wrk_name”、“department”和“date”,用户只能通过“worker_name”或“worker_name”+“date”或所有复选框进行搜索。
有没有什么方法可以根据给出的参数以及不将它们包含在“filter_by”/“filter 中或只是忽略来动态地形成数据库查询。
请分享您对此类功能的可能实现的想法。谢谢您的时间。