在 sqlalchemy 中使用 "case" 编写查询时遇到问题



在下面的查询中,我不断收到错误"在预期条件接近 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的任何地方进行相等比较,它是用ISIS 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

最新更新