【问题标题】:How to create a dynamic SQL query如何创建动态 SQL 查询
【发布时间】:2016-08-28 16:40:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python sql sqlalchemy flask-sqlalchemy


    【解决方案1】:

    如果给您一个过滤器列表,您可以反复应用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) 的符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多