フレームワークを整える
中級SQLAlchemy を整える。
= SQL を書かずに Python のクラスでデータベースを操作する ORM を、裏側の SQL ごと確かめる
SQLAlchemy が初めての方は、先に そもそも SQLAlchemy とは・どんな場面で使うか をどうぞ。
サンプルコード(クリックでエディタに挿入)
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
モデル定義と作成 — クラスがそのままテーブルになる
class User(Base):と書くと、Base.metadata.create_all(engine)で実際にCREATE TABLEが実行される。 - 2
追加と問い合わせ — Session がやり取りの窓口
session.add()→session.commit()で確定。session.query(User).all()で取り出す。 - 3
リレーション(1対多) — 「持つ」関係をコードで表す
relationship()とForeignKeyで、1人のユーザーが複数の投稿を持つ関係を表現できる。 - 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。