【问题标题】:Converting JSON object to usable sqlalchemy filter statements将 JSON 对象转换为可用的 sqlalchemy 过滤器语句
【发布时间】:2015-05-30 20:35:12
【问题描述】:

我要求从烧瓶组件中调用:

request_json = request.get_json() 

这是一个 JSON 对象,包含以下内容:

{'filter1' : '123', 'filter2' : '456', 'filter3' : '789' }

此外,这些过滤器的大小可能因前端用户而异。它可能只是一个过滤器或多个过滤器。

我想知道如何将这样的对象转换为可用的查询?我相信or_()and_() 是我需要用来构建过滤器的。有没有可能做一些事情,比如......

query.filter_by(and_(*request_json))

我对整个技术堆栈非常陌生...任何帮助将不胜感激!

【问题讨论】:

    标签: python json flask sqlalchemy


    【解决方案1】:

    filter_by 采用关键字参数来执行基本的相等过滤器。删除and_ 并将dict 直接插入filter_by

    query.filter_by(**request_json)
    

    但是,这不会对键或值进行验证。所以如果有人传入'fish': 3而没有“fish”列,或者传入'column4': 'abc'而column4实际上是一个数组类型,你会得到一个错误。

    因此,手动验证和执行过滤可能更安全、更直接。

    query = MyModel.query
    
    if 'column1' in data:
        try:
            value = int(data['column1'])
        except (TypeError, ValueError):
            pass
        else:
            query = query.filter(MyModel.column1 == value)
    
    if 'column2' in data:
        try:
            value = datetime.utcfromtimestamp(int(data['column2']))
        except (TypeError, ValueError):
            pass
        else:
            query = query.filter(MyModel.column2 >= value)
    
    # etc.
    
    return query
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2020-09-05
      • 1970-01-01
      • 2017-02-14
      • 2016-12-24
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多