SQLAlchemy不等于postgres

时间:2013-03-04 11:35:59

标签: python sqlalchemy

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

它归结为!=过滤器没有考虑空/ NULL单元格。

所以,比方说吧

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

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

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

现在显然最好在创建列时使用NOT NULL,但我只想查看是否有修复此问题,或者是否值得提交错误

1 个答案:

答案 0 :(得分:0)

嗯,这与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。