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 != NoneIS 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 != NonePython側で使用してもSQLAlchemyは出力しません。あなたが得るIS NOT NULL。ただし、を.isnot()使用すると IS NOT、他の型を強制できます(.isnot(True)たとえば、ブール型の列と比較してください)。
all_filtersここは何ですか?なぜselect_from?