在下面的查询中,我不断收到错误"在预期条件接近 End 的上下文中指定的非布尔类型的表达式"。下面是我的代码,我不想返回连接中 pk__street_name == NULL 的行。但是我得到上面列出的错误。我该如何解决这个问题。
result = session.query(
tamDnRangeMap, tamStreet
).join(tamStreet)
.filter(
case(
[(tamDnRangeMap.pk_street_name == NULL, 0)],
else_ = 1
)
).all()
第一句话是,您不希望在 SQL 中接近NULL
的任何地方进行相等比较,它是用IS
或IS NOT
完成的。
一旦你知道了这一点,你就可以使用SQLAlchemy的is_
或isnot
*运算符。
总而言之,您正在使用CASE
您并不真正需要它的地方,直接将IS NOT NULL
条件放入过滤器中。
result = (
session.query(tamDnRangeMap, tamStreet)
.join(tamStreet)
.filter(tamDnRangeMap.pk_street_name.isnot(None))
.all()
)
>*注意。自 SQLAlchemy 1.4 以来,isnot
已被弃用并替换为is_not
,但该问题使用了在 1.4 中也已弃用的case with list of whens
。