SQLAlchemyでSELECT文を書く
前提
次のクラスをテーブルのための例とする.
class Books(Base): |
SQLのSELECT文の作り方
SQLAlchemyではレコードの選択をquery
で行い,絞り込んだ上でall
等により抽出する.
ここで,filter
はSQLのWHERE
句に相当する.
セッション名.query(取り出したいもの).filter(絞り込み条件).抽出方法 |
抽出するレコードの量による抽出方法の違い
all
all
は複数ヒットするものに使う.
次の例は,1000円以上の書籍の品番と名前を抽出する.
session.query(Books.id, Books.title).filter(Books.price >= 1000).all() |
first
first
は1行に決まるケースで使う.
次の例は,重複しない品番から書籍情報を抽出する.
session.query(Books).filter(Books.id == 'A123').first() |
scalar
scalar
は1つの値に決まるケースで使う.
次の例は,ある品番の書籍情報のうち,価格だけを抽出する.
session.query(Books.price).filter(Books.id == 'A123').scalar() |
DISTINCT
distinct
で重複を取り除くことができる.
次は,1000円以上の書籍の価格のリスト.
session.query(distinct(Books.price)).filter(Books.price >= 1000).all() |
ORDER BY・LIMIT
価格が高いものから5件を抽出するなら,order_by
とlimit
を使って次のようにする.
from sqlalchemy import desc |
絞り込み条件(filter)
AND・OR・NOT
and_
,or_
,not_
を使う.
次は1000円以上でフラグがFalseの書籍を抽出する例.
from sqlalchemy import and_, or_, not_ |
LIKE
like
を使う.
次は「ネコ」で始まる書名の書籍を抽出する例.
session.query(Books).filter(Books.title.like("ネコ%").all() |
BETWEEN
between
を使う.
次は価格が1000円から2000円の書籍を抽出する例.
session.query(Books).filter(Books.price.between(1000, 2000)).all() |
IN
in_
を使う.
次は1000円か1200円の価格である書籍を抽出する.
session.query(Books).filter(Books.price.in_[1000, 1200]).all() |