[英]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.