Python SQLAlchemy不等于postgres

Python SQLAlchemy不等于postgres,python,sqlalchemy,Python,Sqlalchemy,我打算在SQLAlchemy网站上记录一个问题,但在记录之前,我只想检查一下我没有遗漏任何内容。我在IRC上问过,我认为这可能是一个合法的问题 归结起来就是筛选器未考虑空/空单元格 比如说 Session.query(Table).\ filter(Table.column != 1).all() 现在我希望它返回值不等于1的所有记录。然而,它实际返回的是一个包含数据的记录列表,它不等于1 所以,若例如column是NULL/空值,那个么这个查询将不会返回它,而我(和其他人)希望它是这样的 显

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

归结起来就是筛选器未考虑空/空单元格

比如说

Session.query(Table).\
filter(Table.column != 1).all()
现在我希望它返回值不等于1的所有记录。然而,它实际返回的是一个包含数据的记录列表,它不等于1

所以,若例如column是NULL/空值,那个么这个查询将不会返回它,而我(和其他人)希望它是这样的


显然,在创建列时使用NOTNULL是最好的做法,但我只是想看看是否有解决方案,或者是否值得提交一个bug,好吧,这与SQLAlchemy无关,只是NULL如何运行<代码>空!=1既不是真的也不是假的,它的计算结果为空。因此,WHERE子句不会为列返回任何空值的行

您可以选择以下任一选项:

Session.query(Table).filter(or_(
    Table.column == None,
    Table.column != 1,
))
或者类似于:

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

将空值转换为可用于比较的值,如
-1!=1
的计算结果为true。

谢谢,我的生产数据库在列上使用not null,我只是在本地测试了一下,发现了它。谢谢你整理:)