如何创建动态SQL查询

时间:2016-08-28 16:40:55

标签: python sql sqlalchemy flask-sqlalchemy

我有一个33k记录(电影)的大型sqlite表。我想让用户能够通过过滤器在该表中进行搜索。每部电影记录有10个领域:演员,导演,运行时,流派,评级等等。用户可以使用的唯一过滤器是人(包括演员和导演),流派,评级和运行时。

问题是用户可以使用两个或更多的过滤器,因此我们不知道将使用哪个过滤器。过滤器值通过HTTP req传递给处理它的服务器,并根据要在db上执行的过滤器创建SQL查询。

我无法理解的是,如果我不知道将使用哪些过滤器,我该如何创建SQL查询?因为只有使用过的过滤器才会被发送到服务器。

基本上我想找到一种基于每个用户发送的过滤器创建SQL查询的方法。

1 个答案:

答案 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)的表示法。

相关问题