SQLのようにフィルターを追加して、特定の列からNULLでない値を選択するにはどうすればよいですか?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
SQLAlchemyフィルターでどうすれば同じことができますか?
select = select(table).select_from(table).where(all_filters)
SQLのようにフィルターを追加して、特定の列からNULLでない値を選択するにはどうすればよいですか?
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
ます。
または使用isnot()
(0.7.9の新機能):
IS NOT
オペレーターを実装します。通常、
IS NOT
はNone
、に解決されるの値と比較すると自動的に生成されますNULL
。ただし、IS NOT
特定のプラットフォームでブール値と比較する場合は、の明示的な使用が望ましい場合があります。
デモ:
>>> from sqlalchemy.sql import column
>>> column('YourColumn') != None
<sqlalchemy.sql.elements.BinaryExpression object at 0x10c8d8b90>
>>> str(column('YourColumn') != None)
'"YourColumn" IS NOT NULL'
>>> column('YourColumn').isnot(None)
<sqlalchemy.sql.elements.BinaryExpression object at 0x104603850>
>>> str(column('YourColumn').isnot(None))
'"YourColumn" IS NOT NULL'
is
の方法は、カスタムクラスでオーバーロードすることはできません!=
することができます。
バージョン0.7.9以降では.isnot
、次のように、制約を比較する代わりにフィルター演算子を使用できます。
query.filter(User.name.isnot(None))
この方法は、pep8が問題になる場合にのみ必要です。
ソース:sqlalchemyドキュメント
NULL
でなく、!=
SQL のRHSとしては有効ではなく、isnot
より適切に使用することで、生成されたステートメントをどのように見せたいかという意図を伝えるため、より良いソリューションだと思います。
!= NULL
ただし、column != None
Python側で使用してもSQLAlchemyは出力しません。あなたが得るIS NOT NULL
。ただし、を.isnot()
使用すると IS NOT
、他の型を強制できます(.isnot(True)
たとえば、ブール型の列と比較してください)。
all_filters
ここは何ですか?なぜselect_from
?