SQLAlchemy で NULL 値を選択する
2023-10-19 10:50:02
質問
これは私の(PostgreSQLの)テーブルです。
test=> create table people (name varchar primary key,
marriage_status varchar) ;
test=> insert into people values ('Ken', 'married');
test=> insert into people values ('May', 'single');
test=> insert into people values ('Joe', NULL);
の人をすべて選択したい。 ではない つまり、NULL marriage_status を持つ人を含む、既婚であることが分かっているすべての人を選択したい。
これは ではなく は動作する --。
test=> select * from people where marriage_status != 'married' ;
name | marriage_status
------+-----------------
May | single
(1 row)
もちろん、これは--。
test=> select * from people where marriage_status != 'married'
or marriage_status is NULL ;
name | marriage_status
------+-----------------
May | single
Joe |
問題は、SQLAlchemyから--でアクセスしていることです。
...filter(or_(people.marriage_status!='married',
people.marriage_status is None))
に翻訳され、--になります。
SELECT people.name as name,
people.marriage_status as marriage_status
FROM people
WHERE people.marriage_status != %(status_1)s OR False
sqlalchemy.engine.base.Engine.... {'status_1': 'married'}
そして ではない は機能する --。
test=> select * from people where marriage_status != 'married'
or False;
name | marriage_status
------+-----------------
May | single
(1 row)
もそうです。
test=> select * from people where marriage_status != 'married'
or NULL;
name | marriage_status
------+-----------------
May | single
(1 row)
SQLAlchemy で NULL 値を選択するにはどうしたらよいですか?
どのように解決するのですか?
以下のような場合 SQLAlchemy 0.7.8 およびそれ以前
(で示されるように
オーガー
): なぜなら
sqlalchemy
は
マジックメソッド (演算子のオーバーロード)
を使って
SQL
のような演算子しか扱えません。
!=
または
==
を使用することはできませんが
is
(これは非常に有効なPythonの構成要素です)。
したがって、sqlalchemy で動作させるには、次のようにします。
...filter(or_(people.marriage_status!='married', people.marriage_status == None))
のように、基本的には
is None
を
== None
. この場合、クエリは次のようなSQLに適切に変換されます。
SELECT people.name AS people_name, people.marriage_status AS people_marriage_status
FROM people
WHERE people.marriage_status IS NULL OR people.marriage_status != ?
参照
IS NULL
の中にある
のドキュメントを参照してください。
.
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] SELECT' 文の 'IF' - カラムの値に基づいて出力値を選択する
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] SQL Server テーブルからランダムな n 行を選択する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] バブルソートの宿題
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複