在sqlalchemy中过滤或多个

时间:2018-05-12 09:45:53

标签: python python-3.x sqlalchemy

我有一个像这样的元组列表:

l = [
     (100, 230),
     (10, 12),
     (7,1320),
     ...
    ]

我想在SQLAlchemy中生成一个查询,表格的value字段介于100 , 23010, 127, 1320之间,依此类推。

我的表看起来像这样:

id  | value
----|------
1   | 120
2   | 2
3   | 9
4   | 1245
5   | 4512

在这种情况下,我想要这些ID:1,3,4 我做了类似的事情,但我不能做or部分所以它只是过滤符合所有标准的行

 q = session.query(Table.value)
 for f in l:
     q = q.filter((Table.value.between(f[0], f[1])))

我正在使用 Python3.6

1 个答案:

答案 0 :(得分:3)

SQLAlchemy提供or_来组合过滤子句:

from sqlalchemy import or_
...
q = session.query(Table.id)
q = q.filter(or_(Table.value.between(100, 230), Table.value.between(10, 12)))

根据documentationor_实际上接收到可变数量的子句,因此您可以使用列表解析+解包技术将过滤器边界传递给它,如下所示:

q = q.filter(or_(*[Table.value.between(left, right) for left, right in l]))

*是解包运算符,它将从列表或元组中解析出参数,并将它们作为单独的位置参数传递给函数调用。