Sessionによるクエリ
データを読み取り、絞り込みます
「Sessionによるクエリ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
Session
ORM の処理はすべて Session を通じて行われます。Session は作業単位を管理し、新規、変更、削除されたオブジェクトを追跡して、データベースとやり取りします。
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
print('Session open:', session)オブジェクトの追加
session.add() は新しいオブジェクトを追加対象として登録します。commit() するまで、データベースには何も反映されません。
from sqlalchemy.orm import Session
# session.add(user) stages it
# session.commit() writes it
print('add stages, commit saves')変更のコミット
session.commit() は保留中の変更をフラッシュし、トランザクションをコミットして変更を永続化します。
# with Session(engine) as session:
# session.add(User(name='Alice'))
# session.commit()
print('commit persists the work')select() によるクエリ
現在の SQLAlchemy では、select() を Session から実行してデータを読み取ります。scalars() はモデルインスタンスを返します。
from sqlalchemy import select
# stmt = select(User)
# users = session.scalars(stmt).all()
print('select(User) then scalars().all()')すべての行の取得
session.scalars(select(User)).all() は、テーブル内のすべての User オブジェクトをリストとして返します。
from sqlalchemy import select
# all_users = session.scalars(select(User)).all()
# for u in all_users:
# print(u.name)
print('all() returns a list of objects')where() によるフィルタリング
where() 句を追加してフィルタリングします。マッピングされたカラムを、通常の Python 演算子で比較します。
from sqlalchemy import select
# stmt = select(User).where(User.age > 28)
# adults = session.scalars(stmt).all()
print('where(User.age > 28) filters rows')1つのオブジェクトの取得
session.scalars(stmt).first() は最初の一致を返し、一致がなければ None を返します。one() は行がちょうど1つあることを要求し、それ以外の場合は例外を発生させます。
from sqlalchemy import select
# stmt = select(User).where(User.name == 'Alice')
# user = session.scalars(stmt).first()
print('first() = first match or None')主キーによる検索
session.get(User, 1) は、主キーで単一のオブジェクトを取得する最速の方法です。
# user = session.get(User, 1)
# print(user.name)
print('session.get(Model, pk) fetches by id')検索結果の並べ替え
order_by() をつないで並べ替えます。降順にするには、カラムに .desc() を使用します。
from sqlalchemy import select
# stmt = select(User).order_by(User.age.desc())
# sorted_users = session.scalars(stmt).all()
print('order_by(User.age.desc()) sorts results')オブジェクトの更新
読み込んだオブジェクトの属性を変更してから、commit() します。Session が変更を検出し、UPDATE を発行します。
# user = session.get(User, 1)
# user.name = 'Alicia'
# session.commit() # auto UPDATE
print('Edit attribute, then commit')オブジェクトの削除
session.delete(obj) はオブジェクトを削除対象としてマークします。DELETE は次回のコミット時に実行されます。
# user = session.get(User, 1)
# session.delete(user)
# session.commit() # row removed
print('delete(obj) then commit removes the row')理解度チェック
Session に関する知識を確認しましょう。
まとめ
Session を通じてデータを読み取り、変更する方法を学びました。
Sessionは作業単位を追跡しますadd()は追加対象として登録し、commit()は永続化しますselect()とscalars()でオブジェクトを読み取り、where()でフィルタリングしますsession.get()は主キーで取得し、編集とdelete()はコミット時に反映されます
よくある質問
「Sessionによるクエリ」レッスンは無料ですか?
はい。「Sessionによるクエリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「Sessionによるクエリ」で何を学びますか?
データを読み取り、絞り込みます ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Sessionによるクエリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SQLAlchemy CoreとORMの違い
- モデルの定義
- Sessionによるクエリ
- リレーションシップとJOIN