特定の列から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
を生成します。
または isnot()
を使用します(0.7.9の新機能):
IS NOT
演算子を実装します。通常、
None
の値と比較すると、IS NOT
は自動的に生成され、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'
バージョン0.7.9以降では、次のように制約を比較する代わりに、フィルター演算子.isnot
を使用できます。
query.filter(User.name.isnot(None))
この方法は、pep8が懸念される場合にのみ必要です。
ソース: sqlalchemyドキュメント
他の誰かが疑問に思っている場合は、is_
を使用してfoo IS NULL
を生成できます。
>>> from sqlalchemy.sql import column >>> print column( 'foo')。is_(None) foo IS NULL >>> print column( 'foo')。isnot(None) foo IS NOT NULL