0

我正在尝试将此代码用作带有烧瓶和 sql 炼金术的 OR 运算符。

.filter(
(Model.c != True, Model.d == None ) 
| 
(Model.c == True, Model.d != None ) 
)

TypeError: unsupported operand type(s) for |: 'tuple' and 'tuple'

然而,这种语法似乎只适用于一个参数。类似的东西可以正常工作:

.filter((Model.a != X) | (Model.a == Y))

所以我的问题是如何添加过滤条件来选择第一个序列或第二个序列的组合。

4

2 回答 2

1

只有逗号,您|在两个元组上使用运算符,这是不受支持的。

您需要使用 SQLAlchemyand_函数:

from sqlalchemy import and_
filter(and_(x == 'a', y == 'b'))

快速编辑:例如,您可以将其链接起来,or_以实现如下目的:

from sqlalchemy import or_, and_
filter(
    or_(
        and_(x == 'a', y == 'b'),
        and_(x == 'c', y == 'd')
    )
)
于 2020-07-05T00:08:03.193 回答
0

您的错误在于您使用的逗号。当您使用逗号时,python 将您的代码解释为布尔值元组。你不能通过 or 传递这样的元组。您应该将这两个条件与一个布尔运算符(如and orand )连接起来not,以形成一个可以通过or运算符传递的布尔答案

于 2020-07-04T04:05:07.323 回答