0

SQLAlchemy サイトに問題を記録するつもりでしたが、その前に、何も見逃していないかどうかを確認したかっただけです。IRC で質問しましたが、これは正当な問題である可能性があると思います。

要するに、!= フィルターは空/NULL セルを考慮していないということです。

たとえば、

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

これで、値が 1 に等しくないすべてのレコードが返されることが期待されます。ただし、実際に返されるのは、1 に等しくないデータを含むレコードのリストです。

したがって、たとえば column が NULL/空の値であった場合、このクエリでは返されず、私 (および他の人) はそれを期待していました。

明らかに、列の作成に NOT NULL を使用するのがベスト プラクティスですが、これに対する修正があるかどうか、またはバグを報告する価値があるかどうかを確認したかっただけです。

4

1 に答える 1

0

Well, this has nothing to do with SQLAlchemy, it is just how NULL rolls. NULL != 1 is neither true or false, it evaluates to NULL. Thus, the WHERE clause won't return any row with NULL value for the column.

You can go with either:

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

or something like:

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

to transform NULL values into something usable for comparison, as -1 != 1 evaluates to true.

于 2013-03-04T11:58:30.280 に答える