0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SQLAlchemy CoreとORMの違い
  2. モデルの定義
  3. Sessionによるクエリ
  4. リレーションシップとJOIN
← Python Academyに戻る