1. ホーム
  2. python

[解決済み] sqlalchemy IS NOT NULL select

2022-05-08 14:37:12

質問

あるカラムからNOT NULLの値を選択するために、SQLのようなフィルタを追加するにはどうすればよいですか?

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

SQLAlchemyのフィルターで同じことをするにはどうしたらよいでしょうか?

select = select(table).select_from(table).where(all_filters) 

解決方法は?

column_obj != None を生成します。 IS NOT NULL 制約条件 :

カラムコンテキストでは、以下の句を生成します。 a != b . もしターゲットが None を生成します。 IS NOT NULL .

または is_not() * :

を実装します。 IS NOT 演算子を使用します。

通常は IS NOT の値と比較したときに自動的に生成されます。 None に解決されます。 NULL . しかし、明示的に IS NOT は、特定のプラットフォームでブーリアン値と比較する場合に望ましいかもしれません。

デモです。

>>> from sqlalchemy.sql import column
>>> column('YourColumn') != None
<sqlalchemy.sql.elements.BinaryExpression object at 0x10f81aa90>
>>> print(column('YourColumn') != None)
"YourColumn" IS NOT NULL
>>> column('YourColumn').is_not(None)
<sqlalchemy.sql.elements.BinaryExpression object at 0x11081edf0>
>>> print(column('YourColumn').is_not(None))
"YourColumn" IS NOT NULL

を使用することはできません。 is not None というのは、ここで is not オブジェクトの同一性不一致テスト のようにオーバーロードすることはできません。 != を取得するだけです。 True として、代わりに ColumnClause のインスタンスは同じオブジェクトではありません。 None のシングルトンです。

>>> column('YourColumn') is not None
True


*) このメソッドは、以前は isnot() で、SQLAlchemy 1.4 で改名されました。後方互換性のために、古い名前もまだ利用可能です。