テーブルから選択したデータのフィルタリング - 応用
かなり慣れてきましたね!SQLAlchemy では、より複雑なフィルタリングを行うために and_(), or_(), not_() といった連結(論理演算)も使えます。たとえば、次のコードで、ニューヨーク州に住み、年齢が 21 歳または 37 歳の人のレコードを取得できます。
select([census]).where(
and_(census.columns.state == 'New York',
or_(census.columns.age == 21,
census.columns.age == 37
)
)
)
同等の SQL は次のようになります。
SELECT * FROM census WHERE state = 'New York' AND (age = 21 OR age = 37)
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
sqlalchemyモジュールからand_をインポートします。censusテーブルのすべてのレコードを選択します。- where 句を追加し、
stateが'California'で、かつsexが'M'ではないレコードをすべてフィルタリングします。 - 接続で
stmtを実行し、ResultProxy を反復処理して、各レコードのage列とsex列を出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import and_
from ____ import ____
# Build a query for the census table: stmt
stmt = select(____)
# Append a where clause to select only non-male records from California using and_
stmt = stmt.where(
# The state of California with a non-male sex
____(census.columns.state == ____,
census.columns.sex != ____
)
)
# Loop over the ResultProxy printing the age and sex
for result in ____:
print(____, ____)