或多个SQL Alchemy查询过滤器

azn*_*956 0 python sqlalchemy

所以我正在尝试使用python为sql炼金术调用构建多个过滤器.一世

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(or_(MyModel.column2 >= value))

# etc.

return query
Run Code Online (Sandbox Code Playgroud)

我只是这样做,因为数据对象中的属性会有所不同,我不知道在数据对象中的过滤器方面会得到什么.现在,当我执行查询...语句AND将两个滤波器不管的or_我把第二个过滤器查询.为了使查询正常工作,我需要更改什么?

Sim*_*ser 5

首先收集约束然后应用or_:

constraints = []
if 'column1' in data:
    try:
        value = int(data['column1'])
    except (TypeError, ValueError):
        pass
    else:
        constraints.append(MyModel.column1 == value)

if 'column2' in data:
    try:
        value = datetime.utcfromtimestamp(int(data['column2']))
    except (TypeError, ValueError):
        pass
    else:
        constraints.append(MyModel.column2 >= value)

if constraints:
    query = query.filter(or_(*constraints))
Run Code Online (Sandbox Code Playgroud)