我有一个33k记录(电影)的大型sqlite表。我想让用户能够通过过滤器在该表中进行搜索。每部电影记录有10个领域:演员,导演,运行时,流派,评级等等。用户可以使用的唯一过滤器是人(包括演员和导演),流派,评级和运行时。
问题是用户可以使用两个或更多的过滤器,因此我们不知道将使用哪个过滤器。过滤器值通过HTTP req传递给处理它的服务器,并根据要在db上执行的过滤器创建SQL查询。
我无法理解的是,如果我不知道将使用哪些过滤器,我该如何创建SQL查询?因为只有使用过的过滤器才会被发送到服务器。
基本上我想找到一种基于每个用户发送的过滤器创建SQL查询的方法。
答案 0 :(得分:2)
如果您获得了过滤器列表,则可以一遍又一遍地应用Query.filter_by()
或Query.filter()
:
filters = [
('rating', 3),
('runtime', 90),
('genre', 'documentary')
]
query = session.query(Movie)
for column, value in filters:
# Make sure `column` and `value` are legal values!
query = query.filter_by(**{column: value})
由于查询仅在结束时进行评估,因此您实际上在做:
query = query.filter_by(...).filter_by(...) ...
在最后一行中,filter_by(**{column: value})
是filter_by(value_of_column_variable=value)
的表示法。