繁体   English   中英

SQLAlchemy不等于Postgres

[英]SQLAlchemy not equals on postgres

我本打算在SQLAlchemy网站上记录一个问题,但是在我这样做之前,我只想检查一下我是否没有遗漏任何东西。 我曾问过IRC,我认为这可能是一个合法的问题。

归结为!=过滤器未考虑空/ NULL单元。

因此,举例来说

Session.query(Table).\
filter(Table.column != 1).all()

现在,我希望它返回值不等于1的所有记录。但是,它实际返回的是包含数据的记录列表,该记录不等于1。

因此,例如,如果column是NULL /空值,那么此查询将不会返回它(我(和其他人)希望它返回)。

现在显然是在创建列时使用NOT NULL的最佳实践,但是我只是想看看是否有针对此的修复程序,或者是否值得提交错误

好吧,这与SQLAlchemy无关,这只是NULL滚动的方式。 NULL != 1既不是true也不是false,它的计算结果为NULL。 因此,WHERE子句不会为该列返回任何具有NULL值的行。

您可以选择以下两者之一:

Session.query(Table).filter(or_(
    Table.column == None,
    Table.column != 1,
))

或类似的东西:

Session.query(Table).filter(
    func.coalesce(Table.column, -1) != 1)

将NULL值转换为可用于比较的值,因为-1 != 1计算为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM