始める無料で始める

テーブルから選択したデータのフィルタリング - 応用

かなり慣れてきましたね!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(____, ____)
コードを編集して実行