本文へスキップ
totonoe.tech

フレームワークを整える

中級

SQLAlchemy を整える。

= SQL を書かずに Python のクラスでデータベースを操作する ORM を、裏側の SQL ごと確かめる

SQLAlchemy が初めての方は、先に そもそも SQLAlchemy とは・どんな場面で使うか をどうぞ。

サンプルコード(クリックでエディタに挿入)

PYTHON EDITOR sqlite:///:memory: + SQLAlchemy ORM

OUTPUT

Python コードを書いて「実行」を押すと、print と SQL ログがここに出ます。

そもそも SQLAlchemy とは

SQL を直接書かず、Python のクラスでデータベースを操作する道具。

SQLAlchemy は、Python からデータベースを扱うためのライブラリです。テーブルを Python のクラス、行をそのクラスのオブジェクトとして扱い、保存や検索を Python のコードで書けます。この考え方を ORM(オブジェクトと表の対応づけ)と呼びます。

ORM だけでなく、SQL を組み立てる低い階層の機能も持っています。Django のように Web フレームワークに組み込まれた ORM とは違い、Flask など他の道具と組み合わせて使えるのが特長です。裏でどんな SQL が実行されているかも確認できます。

どこで・どんな場面で使うか

  • Web アプリのデータ保存

    Flask や FastAPI で作るサービスで、ユーザーや注文などのデータを保存・検索する部分に使われます。

  • データベースの種類を意識しない開発

    PostgreSQL や SQLite など、複数のデータベースに対して同じ書き方で扱えます。

  • テーブル定義の管理

    クラスでテーブルの構造を書いておき、変更の履歴を管理する仕組み(Alembic など)と組み合わせる使い方があります。

  • SQL インジェクション対策

    値を自分で文字列に埋め込まず、渡し方を道具に任せることで、危険な書き方を避けやすくなります。

  • Python での業務データ処理

    データベースの内容を Python で読み書きするスクリプトや、バッチ処理でも使われます。

向いている場面・向いていない場面

  • 向いている:Python で作るアプリで、データの保存先を一貫した書き方で扱いたいとき。
  • 向いている:裏の SQL の動きを理解しながら使いたいとき。echo で実際の SQL を確かめられます。
  • 注意:複雑な集計は、素の SQL のほうが読みやすい場合もあります。SQL の基本を知ったうえで使うと、挙動を理解しやすくなります。

上の練習場で、クラスを定義して保存・検索を動かし、裏で実行される SQL も見てみてください。

使い方

4 ステップで ORM の骨格をつかむ。

  1. 1

    モデル定義と作成 — クラスがそのままテーブルになる

    class User(Base): と書くと、Base.metadata.create_all(engine) で実際に CREATE TABLE が実行される。

  2. 2

    追加と問い合わせ — Session がやり取りの窓口

    session.add() → session.commit() で確定。session.query(User).all() で取り出す。

  3. 3

    リレーション(1対多) — 「持つ」関係をコードで表す

    relationship() と ForeignKey で、1人のユーザーが複数の投稿を持つ関係を表現できる。

  4. 4

    echo — 裏側の SQL を覗く

    create_engine(..., echo=True) にすると、ORM が実際に発行している CREATE TABLE / INSERT / SELECT がそのまま出力される。

💡 初回は Pyodide(Python WASM)に加えて SQLAlchemy パッケージの読み込みで数秒〜十数秒かかります。2 回目以降はキャッシュから瞬時にロード。 書いたコードと実行結果は、どこにも送信されません(すべてブラウザ内で実行、DB もブラウザのメモリ上だけ)。

🌐 「実行」を押した最初の1回だけ、Python の実行環境(Pyodide 0.28.0)と SQLAlchemy パッケージを配信元の cdn.jsdelivr.net から取得します。 これはプログラムを受け取るだけの通信で、あなたが書いたコードや実行結果が送られることはありません。

このツールについて

SQL を直接書かず、Python のクラスとメソッドでデータベースを操作する——それが ORM(object-relational mapping)。裏側でどんな SQL が実行されているかも、echo で覗けます。

SQL を直接書かず Python のクラスでデータベースを操作する ORM の練習場。echo で裏側の生成 SQL も覗ける。DB はブラウザのメモリ上だけ。

主な機能

  • 4サンプル(モデル定義/追加と問い合わせ/1対多リレーション/echo)
  • echo=True で実際に発行される SQL を表示
  • 単一エディタ+出力パネル
  • sqlite in-memory・Pyodide 上で実行・送信ゼロ

よくある質問

Q. SQLAlchemy とは何ですか?

A. Python のクラスとメソッドで SQL データベースを操作するための ORM ライブラリです。SQL を直接書かなくてもデータの作成・追加・検索ができます。

Q. echo=True にすると何が起きますか?

A. ORM が裏側で発行している SQL 文(CREATE TABLE・INSERT・SELECT など)がそのままログとして出力されます。

Q. ここで作ったデータベースはどこかに保存されますか?

A. 保存されません。sqlite:///:memory: はブラウザのメモリ上だけの一時的なデータベースで、ページを閉じると消えます。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

運営サイト

私たちが運営するサイト