PythonのORMとは?SQLAlchemyを使ったデータベース管理を初心者向けに徹底解説
生徒
「Pythonでデータベースを使うとき、SQLを書かなくても操作できる方法があるって聞いたんですが本当ですか?」
先生
「ありますよ。PythonではORM(オーアールエム)という仕組みを使うと、プログラムの言葉でデータベースを扱えます。その代表例がSQLAlchemy(エスキューエルアルケミー)です。」
生徒
「データベースって難しそうなイメージがあります…。」
先生
「大丈夫です。パソコンを触ったことがない人でもイメージできるように、たとえ話を交えながら説明していきます。」
1. ORM(オーアールエム)とは何か?
ORMとは「Object Relational Mapping(オブジェクト リレーショナル マッピング)」の略です。難しく聞こえますが、考え方はとてもシンプルです。データベースを「表がたくさん並んだノート」、Pythonのプログラムを「文章を書く人」と考えてみてください。
本来、データベースに保存された情報を取り出すにはSQL(エスキューエル)という専用の言葉を書かなければなりません。ORMを使うと、そのSQLを直接書かずに、Pythonの命令だけでデータの保存・検索・更新・削除ができます。つまり「翻訳機」のような役割をしてくれるのがORMです。
2. PythonでORMを使うメリット
PythonでORMを使う最大のメリットは「難しいSQLを覚えなくてもよい」点です。プログラミング未経験の人にとって、SQLは新しい文法だらけでつまずきやすい部分です。
ORMを使えば、Pythonの変数やクラスを使ってデータベースを操作できます。これは「住所録を表計算ソフトで直接編集する」のではなく、「住所録アプリのボタンを押して登録する」感覚に近いです。間違いが起きにくく、読みやすいプログラムを書くことができます。
3. SQLAlchemy(エスキューエルアルケミー)とは?
SQLAlchemyは、Pythonで最も有名なORMライブラリです。ライブラリとは、便利な機能をまとめた道具箱のようなものです。SQLAlchemyを使うことで、SQLite、MySQL、PostgreSQLなど、さまざまなデータベースを同じ書き方で扱えます。
「Alchemy」は「錬金術」という意味で、SQLという金属をPythonという別の形に変える、というイメージから名付けられています。
4. データベースとテーブルをクラスで表す
SQLAlchemyでは、データベースのテーブルをPythonのクラスとして表現します。クラスとは「設計図」のようなものです。例えば「人」という設計図があれば、名前や年齢といった情報を持つ人を何人も作れます。
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
この例では「users」というテーブルを「User」クラスで表しています。テーブルの列(カラム)は、クラスの中の変数として定義されています。
5. データを登録する基本操作
次に、データベースへデータを保存する方法を見てみましょう。これは「ノートに新しい情報を書き込む」イメージです。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine("sqlite:///sample.db")
Session = sessionmaker(bind=engine)
session = Session()
user = User(name="太郎", age=20)
session.add(user)
session.commit()
ここではSQLite(エスキューライト)という軽量なデータベースを使っています。「commit」は「保存ボタン」を押すようなものです。
6. データを検索する方法
保存したデータは、条件を指定して取り出すことができます。これは「住所録から名前で探す」ような操作です。
users = session.query(User).all()
for user in users:
print(user.name, user.age)
太郎 20
このように、SQLを書かずにPythonの命令だけで検索結果を扱えます。
7. データを更新・削除する考え方
データの更新は「書き直し」、削除は「消しゴムで消す」イメージです。SQLAlchemyでは、対象のデータを取得してから変更します。
user = session.query(User).first()
user.age = 21
session.commit()
この例では、最初のユーザーの年齢を変更しています。削除の場合も同じように対象を指定して命令します。
8. 初心者がつまずきやすいポイント
初心者がよくつまずくのは「データベースに反映されない」という点です。その原因の多くは「commitを書き忘れている」ことです。commitは「確定」の意味があり、これをしないと変更は保存されません。
また、ORMは便利ですが、裏側ではSQLが自動生成されています。そのため「何をしているか分からなくなったら、データベースは表の集まり」という基本に立ち返ることが大切です。