0Pricing
Python Academy · レッスン

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

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

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