加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在sqlalchemy中过滤或多个

发布时间:2020-12-16 22:26:16 所属栏目:Python 来源:网络整理
导读:我有一个像这样的元组列表: l = [ (100,230),(10,12),(7,1320),... ] 我想在SQLAlchemy中生成一个查询,我的表的值字段在100,230或10,12或7,1320之间,依此类推. 我的表看起来像这样: id | value----|------1 | 1202 | 23 | 94 | 12455 | 4512 在这种情况下,

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

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

我想在SQLAlchemy中生成一个查询,我的表的值字段在100,230或10,12或7,1320之间,依此类推.

我的表看起来像这样:

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

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

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

我正在使用Python3.6.

最佳答案
SQLAlchemy提供or_来组合filter子句:

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读