SQLAlchemy CoreとORMの違い
2つの層を理解します
「SQLAlchemy CoreとORMの違い」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
SQLAlchemyとは
SQLAlchemyは、リレーショナルデータベースを扱うための、最も広く使われているPythonツールキットです。CoreとORMという2つのレイヤーを提供します。
pip install sqlalchemyでインストールできます。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)Engine
どちらのレイヤーも、create_engine()で作成するEngineから始まります。Engineは接続プールを管理し、URLを通じて使用するデータベースとの通信方法を把握します。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)2つのレイヤー
CoreはSQL式ツールキットです。SQLに近い形でクエリを組み立てます。
ORMはCoreの上に構築されており、Pythonクラスをテーブルに対応付けます。そのため、行ではなくオブジェクトを扱えます。
# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')Core:テーブルの定義
Coreでは、TableとMetaDataのオブジェクトを使って、テーブルを明示的に記述します。
from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String))
print('Table defined:', users.name)Core:クエリの組み立て
Coreでは、select()のようなPython式を使ってクエリを組み立てます。これらはSQLに直接変換されます。
from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)ORM:マッピングされたクラス
ORMでは、Pythonクラスがテーブルを表します。各属性がカラムに対応します。生の行ではなく、オブジェクトをクエリして保存します。
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
print('Mapped class:', User.__tablename__)Coreを使う場面
正確なSQLを細かく制御したい場合や、大量のデータを処理する場合、またオブジェクトによるオーバーヘッドが増える複雑なレポート用クエリを実行する場合は、Coreが適しています。
# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')ORMを使う場面
ORMは一般的なアプリケーションコードに適しています。ビジネスエンティティをクラスとしてモデル化でき、変更追跡も利用できるため、定型コードを減らせます。
# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')共有されるEngine
ORMはCore上に構築されているため、どちらも同じEngineと接続プールを使用します。1つのアプリケーションで両方を組み合わせることもできます。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')テーブルの作成
ORMでは、Base.metadata.create_all(engine)が、マッピングされたすべてのクラスに対応するCREATE TABLE文を発行します。
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')レイヤーの選択
ほとんどのアプリでは日常的な処理にORMを使い、まれに必要となる負荷の高いクエリや高度にチューニングしたクエリではCoreに切り替えます。両方を知っておくと柔軟に対応できます。
# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')確認テスト
2つのレイヤーについての理解度を確認しましょう。
まとめ
SQLAlchemyのアーキテクチャについて学びました。
Engineはcreate_engine()を通じてすべての処理を支えます- Coreは、制御性とパフォーマンスに優れたSQL式ツールキットです
- ORMはクラスをテーブルに対応付け、効率的なアプリケーションコードを実現します
- 両方が同じEngineを共有し、組み合わせて使用できます
よくある質問
「SQLAlchemy CoreとORMの違い」レッスンは無料ですか?
はい。「SQLAlchemy CoreとORMの違い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「SQLAlchemy CoreとORMの違い」で何を学びますか?
2つの層を理解します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「SQLAlchemy CoreとORMの違い」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SQLAlchemy CoreとORMの違い
- モデルの定義
- Sessionによるクエリ
- リレーションシップとJOIN